Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Multiple columns index when using the declarative ORM extension of sqlalchemy

According to the documentation and the comments in the sqlalchemy.Column class, we should use the class sqlalchemy.schema.Index to specify an index that contains multiple columns.

However, the example shows how to do it by directly using the Table object like this:

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) 

How should we do it if we use the declarative ORM extension?

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

I would like an index on column "a" and "b".

like image 441
yorjo Avatar asked Jul 08 '11 15:07

yorjo


People also ask

What is index in SQLAlchemy?

SQLAlchemy Index is used for assigning the identifiers for each of the particular row getting stored inside a table. We can have indexing based on the single column or collection of two or more columns together acting as an index to the table rows.

How do I make a column unique in SQLAlchemy?

unique – When True, indicates that this column contains a unique constraint, or if index is True as well, indicates that the Index should be created with the unique flag. To specify multiple columns in the constraint/index or to specify an explicit name, use the UniqueConstraint or Index constructs explicitly.

How do I create a composite key in SQLAlchemy?

To create a composite primary key, set primary_key to True on each column involved in the key. A boolean argument when set to False adds NOT NULL constraint while creating a column. Its default value is True .

What is Composite index SQL?

An SQL composite index is an index with an index key of more than 1 column. It is good for covering searches and lookups like WHERE clause and joins. You can create composite indexes using CREATE INDEX or ALTER TABLE. An SQL GUI tool can also be used.


1 Answers

those are just Column objects, index=True flag works normally:

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

if you'd like a composite index, again Table is present here as usual you just don't have to declare it, everything works the same (make sure you're on recent 0.6 or 0.7 for the declarative A.a wrapper to be interpreted as a Column after the class declaration is complete):

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) 

In 0.7 the Index can be in the Table arguments too, which with declarative is via __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"), ) 
like image 72
zzzeek Avatar answered Sep 28 '22 19:09

zzzeek