python - 在生产中将复合主键添加到辅助关联表

标签 python postgresql sqlalchemy

我有一个包含设置错误的表格:

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 添加到 ColumnsPrimaryKeyConstraint('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/

相关文章:

python - 如何创建链式管道?

SQL 字符串模糊匹配。数组还是串联?

由于自动关联,SQLAlchemy query.filter 未返回 FROM 子句

python - 仅在必要时连接数据库

python - sqlalchemy.exc.OperationalError : (psycopg2. OperationalError) 与 PostgreSQL

Python递归将元组列表排序为树结构

python - 在不使用 celery 的情况下在特定时间后执行python函数

postgresql - 行级安全性不适用于表所有者

python - 使用 SQLALCHEMY 设置 Oracle VARCHAR2 长度 i 字节

python - 使用 dict comprehensions 时的问题。名称错误 : global name is not defined