119 votes

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

Selon la documentation: http://www.sqlalchemy.org/docs/06/core/schema.html?highlight=index#indexes

et les commentaires dans le sqlalchemy.Colonne de classe, il convient d'utiliser la classe de sqlalchemy.schéma.Indice pour spécifier un index qui contiennent plusieurs index.

Cependant, l'exemple montre comment le faire en utilisant directement l'objet de la Table comme ceci:

meta = Métadonnées()
matable = Table('mytable', meta,
 # une colonne indexée, avec l'index "ix_mytable_col1"
 Colonne ("col1', Entier, index=True),

 # une unique colonne indexée à l'indice "ix_mytable_col2"
 Colonne ("col2', Entier, index=True, unique=True),

 Colonne ("col3', Entier),
 Colonne ("col4', Entier),

 Colonne ("col5', Entier),
 Colonne ("col6', Entier),
)

# placez un index sur col3, col4
Index('idx_col34', mytable.c.col3, mytable.c.col4)

Comment devrions-nous le faire si nous utilisons le déclaratif ORM extension?

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

Je voudrais un index sur la colonne "a" et "b".

166voto

zzzeek Points 22617

ce sont quelques - Column objets, index=True indicateur fonctionne normalement:

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

si vous souhaitez un indice composite, de nouveau, Table est présent ici, comme d'habitude, vous n'avez pas à les déclarer, tout fonctionne de la même (assurez-vous que vous êtes sur les récentes 0,6 ou 0,7 pour le déclaratif A. un wrapper pour être interprété comme un Column après la déclaration de la classe est complète):

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

Index('my_index', A.a, A.b)

Dans 0,7 l' Index peut être dans l' Table arguments trop, qui, avec déclarative est par l'intermédiaire d' __table_args__:

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X