获取sqlalchemy.migrate以使用主键重命名列

时间:2014-01-05 17:48:21

标签: python sqlalchemy sqlalchemy-migrate

我正在尝试将具有主键约束的表中的列重命名为另一个名称,并添加一个新列,其中新类型将成为主键。

所以目前我有:

  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

如果有人知道如何做到这一点

1 个答案:

答案 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

上的主键