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"), )