Index à plusieurs colonnes lors de l’utilisation de l’extension ORM déclarative de sqlalchemy

Selon la documentation et les commentaires de la classe sqlalchemy.Column , nous devrions utiliser la classe sqlalchemy.schema.Index pour spécifier un index contenant plusieurs colonnes.

Cependant, l’exemple montre comment le faire en utilisant directement l’object Table comme ceci:

 meta = MetaData() mytable = Table('mytable', meta, # an indexed column, with index "ix_mytable_col1" Column('col1', Integer, index=True), # a uniquely indexed column with index "ix_mytable_col2" Column('col2', Integer, index=True, unique=True), Column('col3', Integer), Column('col4', Integer), Column('col5', Integer), Column('col6', Integer), ) # place an index on col3, col4 Index('idx_col34', mytable.c.col3, mytable.c.col4) 

Comment devrions-nous le faire si nous utilisons l’extension ORM déclarative?

 class A(Base): __tablename__ = 'table_A' id = Column(Integer, , primary_key=True) a = Column(Ssortingng(32)) b = Column(Ssortingng(32)) 

Je voudrais un index sur les colonnes “a” et “b”.

ce ne sont que des objects Column , index = True flag fonctionne normalement:

 class A(Base): __tablename__ = 'table_A' id = Column(Integer, primary_key=True) a = Column(Ssortingng(32), index=True) b = Column(Ssortingng(32), index=True) 

Si vous souhaitez un index composite, encore une fois Table est présent ici comme d’habitude, vous n’avez pas à le déclarer, tout fonctionne de la même manière (assurez-vous que vous êtes sur 0.6 ou 0.7 pour que le wrapper Aa déclaratif soit interprété comme une Column après la déclaration de la classe est terminée):

 class A(Base): __tablename__ = 'table_A' id = Column(Integer, primary_key=True) a = Column(Ssortingng(32)) b = Column(Ssortingng(32)) Index('my_index', Aa, Ab) 

Dans 0.7, l’ Index peut également se trouver dans les arguments Table la Table , ce qui avec déclaration est via __table_args__ :

 class A(Base): __tablename__ = 'table_A' id = Column(Integer, primary_key=True) a = Column(Ssortingng(32)) b = Column(Ssortingng(32)) __table_args__ = (Index('my_index', "a", "b"), )