3

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

所以目前我有:

  TABLE (
     `id` VARCHAR(36) PRIMARY_KEY,
  ) table;

我想重命名iduuid添加一个新的 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

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

4

1 回答 1

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这将使您获得新创建列上的主键

于 2014-01-06T09:19:56.870 回答