"""store business time in beijing timezone Revision ID: 202607081530 Revises: 202607080900 Create Date: 2026-07-08 15:30:00 """ from typing import Sequence, Union from alembic import op revision: str = "202607081530" down_revision: Union[str, None] = "202607080900" branch_labels: Union[str, Sequence[str], None] = None depends_on: Union[str, Sequence[str], None] = None def upgrade() -> None: # 历史数据由UTC换算为北京时间,后续新数据由业务层直接写入北京时间。 op.execute("UPDATE agent_runs SET started_at = DATE_ADD(started_at, INTERVAL 8 HOUR)") op.execute( "UPDATE agent_runs SET finished_at = DATE_ADD(finished_at, INTERVAL 8 HOUR) " "WHERE finished_at IS NOT NULL" ) op.execute("UPDATE reports SET created_at = DATE_ADD(created_at, INTERVAL 8 HOUR)") op.execute("UPDATE signals SET created_at = DATE_ADD(created_at, INTERVAL 8 HOUR)") op.execute( "UPDATE signals SET published_at = DATE_ADD(published_at, INTERVAL 8 HOUR) " "WHERE published_at IS NOT NULL" ) def downgrade() -> None: # 回滚时恢复迁移前的UTC记录值,便于迁移链保持可逆。 op.execute("UPDATE agent_runs SET started_at = DATE_SUB(started_at, INTERVAL 8 HOUR)") op.execute( "UPDATE agent_runs SET finished_at = DATE_SUB(finished_at, INTERVAL 8 HOUR) " "WHERE finished_at IS NOT NULL" ) op.execute("UPDATE reports SET created_at = DATE_SUB(created_at, INTERVAL 8 HOUR)") op.execute("UPDATE signals SET created_at = DATE_SUB(created_at, INTERVAL 8 HOUR)") op.execute( "UPDATE signals SET published_at = DATE_SUB(published_at, INTERVAL 8 HOUR) " "WHERE published_at IS NOT NULL" )