"""unique index on user.wechat_openid (一个微信只绑一个账号) Revision ID: a7c8d9e0f1b2 Revises: f5b2d3c4e6a7 Create Date: 2026-05-25 19:10:00.000000 注意:升级前需保证 wechat_openid 无重复值(NULL 不算重复)。 本仓库 data/app.db 升级前已手动清掉重复 openid(保留最近绑定的账号)。 """ from typing import Sequence, Union from alembic import op # revision identifiers, used by Alembic. revision: str = 'a7c8d9e0f1b2' down_revision: Union[str, Sequence[str], None] = 'f5b2d3c4e6a7' branch_labels: Union[str, Sequence[str], None] = None depends_on: Union[str, Sequence[str], None] = None def upgrade() -> None: # nullable 列上的唯一索引:SQLite / Postgres 都允许多个 NULL,只约束非空值唯一 with op.batch_alter_table('user', schema=None) as batch_op: batch_op.create_index( batch_op.f('ix_user_wechat_openid'), ['wechat_openid'], unique=True ) def downgrade() -> None: with op.batch_alter_table('user', schema=None) as batch_op: batch_op.drop_index(batch_op.f('ix_user_wechat_openid'))