我有一个包含设置错误的表格:
ass_table = Table('ass', db.Model.metadata,
Column('id1', db.Integer, db.ForeignKey('class1.id')),
Column('id2', db.Integer, db.ForeignKey('class2.id')),
)
我真的应该将 primary_key=True
添加到 Columns
或 PrimaryKeyConstraint('id1', 'id2', name='silly_me')
。
它最初创建的 alembic 自动生成代码是:
op.create_table('ass',
sa.Column('id1', sa.Integer(), nullable=True),
sa.Column('id2', sa.Integer(), nullable=True),
sa.ForeignKeyConstraint(['id2'], ['class2.id'], ),
sa.ForeignKeyConstraint(['id1'], ['class1.id'], )
)
而且我确认我的 Postgres 数据库没有在 ass
表上建立主键。
现在添加代码不会自动生成用于迁移我的数据库的 alembic 脚本。
添加必要的复合主键的最佳做法是什么?不会中断或破坏现有数据在生产中?
最佳答案
我不知道 alembic,但要在纯 postgres 中执行此操作,我会执行以下操作:
CREATE UNIQUE INDEX CONCURRENTLY silly_me_idx ON ass(id1, id2);
ALTER TABLE ass ADD CONSTRAINT silly_me_pkey PRIMARY KEY USING INDEX silly_me_idx;
关于python - 在生产中将复合主键添加到辅助关联表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56191839/