2016-04-27 26 views
10

Sto tentando di creare usando sqlalchemy un vincolo unico a più colonne che verrà rilevato da Alembic nel suo generatore di script di upgrade automatico.Alambicco + Sqlalchemy Vincolo multi colonna unico

devo creare il vincolo utilizzando:

da sqlalchemy import UniqueConstraint nel mio modello

UniqueConstraint('col1', 'col2', 'number', name='uix_table_col1_col2_col3') 

Tuttavia, questo non è raccolto da Alambicco nella sua generazione automatica di script.

posso creare manualmente questo nello script Alambicco con l'aggiunta in.

op.create_unique_constraint('uq_table_col1_col2_col3', 'table', ['col1', 'col2', 'col3']) 

C'è un modo per avere questo essere generato automaticamente dal Alembic?

Grazie per il vostro aiuto.

risposta

9

stavo sperimentando lo stesso problema e ha scoperto che, se si sta definendo la tabella utilizzando il modello dichiarativo, è possibile aggiungerlo il vincolo unico per __table_args__ e Alambicco sarà raccoglierlo:

class MyClass(Base): 
    __tablename__ = 'table' 
    __table_args__ = (
     UniqueConstraint('col1', 'col2', 'number', name='uix_table_col1_col2_col3'), 
    ) 

http://docs.sqlalchemy.org/en/latest/orm/extensions/declarative/table_config.html