"""作业的「运行间隔」独立出来:`automation_jobs.run_interval_seconds` ## 问题 界面上只有一个「单账号重检间隔(小时)」,但它其实承担了两个互不相干的概念, 而且**调度频率根本改不了**: | 概念 | 之前 | 之后 | | --- | --- | --- | | **多久跑一次** | **硬编码** `JOB_INTERVAL_SECONDS`(5 分钟)| `run_interval_seconds` | | 同一行多久重检 | `interval_seconds` | `interval_seconds`(不变,只是不再兼任调度)| `_run_one` 里原本写着: job.next_run_at = finished + timedelta(seconds=JOB_INTERVAL_SECONDS) 也就是不管在界面上填什么,下一轮永远是「跑完 + 5 分钟」。 用户反馈「直接设置多久跑一次、一次跑多少个更符合直觉」—— 对。 默认 300 秒,与改动前的实际行为一致(不会因为这次迁移让已有作业突然变快/变慢)。 """ from __future__ import annotations import sqlalchemy as sa from alembic import op revision: str = "20261004_0051" down_revision: str | None = "20261004_0050" branch_labels: str | None = None depends_on: str | None = None COLUMN = "run_interval_seconds" def _column_exists(name: str) -> bool: conn = op.get_bind() count = conn.execute( sa.text( "SELECT COUNT(*) FROM information_schema.columns " "WHERE table_schema = DATABASE() " "AND table_name = 'automation_jobs' AND column_name = :name" ), {"name": name}, ).scalar() return bool(count) def upgrade() -> None: if not _column_exists(COLUMN): op.add_column( "automation_jobs", sa.Column( COLUMN, sa.Integer(), nullable=False, server_default="300", comment="多久跑一次(秒);与「同一行多久重检」是两回事", ), ) def downgrade() -> None: op.drop_column("automation_jobs", COLUMN)