我正在尝试将具有主键约束的表中的列重命名为另一个名称,并添加一个新列,其中新类型将成为主键。
所以目前我有:
TABLE (
`id` VARCHAR(36) PRIMARY_KEY,
) table;
我想将id
重命名为uuid
并添加一个新的id作为整数,它将成为主键:
TABLE (
`id` integer PRIMARY_KEY, AUTO_INCRREMENT,
`uuid` VARCHAR(36)
) table;
尝试使用sqlalchemy.migrate:
table = sqlalchemy.Table('table', meta, autoload=True)
event.c.id.alter(name='uuid')
id = sqlalchemy.Column('id', sqlalchemy.Integer(),
primary_key=True)
event_uuid.create(event)
在postgres中出现此错误,因为主键约束未从旧id
中删除:
ERROR: Column.create() accepts index_name, primary_key_name and unique_name to generate constraints
如果有人知道如何做到这一点
答案 0 :(得分:0)
在阅读sqlalchemy.migrate
的源代码后,实际上并不太难,您首先需要通过直接访问它来删除约束:
pk = constraint.PrimaryKeyConstraint('id',
table=table,
name="table_pkey")
pk.drop()
并且在创建时只需将primary_key_name
添加到create方法:
primary_id.create(table=table, primary_key_name='table_pkey')
可以获得新创建的id
列