"""登录用户去掉 Cookie 明细字段;登录网站增加关联登录用户 1. admin_cookie_user:删除 cookie_value、domain 两列 登录用户只登记「账号归属」(用户名/昵称/网站/有效期), Cookie 明细由「登录网站」承载,故这两列不再需要。 2. admin_cookie_site:新增 cookie_user_id(关联 admin_cookie_user.id) 用于把网站挂到某个登录用户下,列表/新增/编辑用下拉框选择。 SQLite 不支持直接 DROP COLUMN,统一用 batch_alter_table 重建表; 每一步都先判断列是否存在,便于重复执行与跨环境差异。 Revision ID: e5f6a7b8c9d0 Revises: d4e5f6a7b8c9 """ from alembic import op import sqlalchemy as sa # revision identifiers, used by Alembic. revision = 'e5f6a7b8c9d0' down_revision = 'd4e5f6a7b8c9' branch_labels = None depends_on = None def _columns(conn, table): insp = sa.inspect(conn) return {c['name'] for c in insp.get_columns(table)} def upgrade(): conn = op.get_bind() user_cols = _columns(conn, 'admin_cookie_user') if 'cookie_value' in user_cols: with op.batch_alter_table('admin_cookie_user', schema=None) as batch_op: batch_op.drop_column('cookie_value') if 'domain' in user_cols: with op.batch_alter_table('admin_cookie_user', schema=None) as batch_op: batch_op.drop_column('domain') site_cols = _columns(conn, 'admin_cookie_site') if 'cookie_user_id' not in site_cols: with op.batch_alter_table('admin_cookie_site', schema=None) as batch_op: batch_op.add_column( sa.Column('cookie_user_id', sa.Integer(), nullable=True, comment='关联登录用户ID') ) def downgrade(): conn = op.get_bind() site_cols = _columns(conn, 'admin_cookie_site') if 'cookie_user_id' in site_cols: with op.batch_alter_table('admin_cookie_site', schema=None) as batch_op: batch_op.drop_column('cookie_user_id') user_cols = _columns(conn, 'admin_cookie_user') if 'domain' not in user_cols: with op.batch_alter_table('admin_cookie_user', schema=None) as batch_op: batch_op.add_column( sa.Column('domain', sa.String(length=255), nullable=True, server_default='', comment='Cookie域名') ) if 'cookie_value' not in user_cols: with op.batch_alter_table('admin_cookie_user', schema=None) as batch_op: batch_op.add_column( sa.Column('cookie_value', sa.Text(), nullable=True, comment='Cookie值') )