2014-01-05 81 views
3

我想重命名錶中的主鍵約束爲另一個名稱的列,並添加一個新類型成爲主鍵的新類型。獲取sqlalchemy.migrate重命名具有主鍵的列

所以目前我有:

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 

如果有人有一個想法如何做到這一點

回答

0

它實際上並不難讀的sqlalchemy.migrate源代碼之後,你首先需要通過直接訪問它只是刪除約束:

pk = constraint.PrimaryKeyConstraint('id', 
            table=table, 
            name="table_pkey") 

pk.drop() 

和創建時只是添加primary_key_name的創建方法:

primary_id.create(table=table, primary_key_name='table_pkey') 

這將讓你在新創建的id

主鍵