Подтвердить что ты не робот

Множественный индекс столбцов при использовании декларативного расширения ORM sqlalchemy

Согласно документации: http://docs.sqlalchemy.org/en/latest/core/constraints.html#indexes

и комментарии в классе sqlalchemy.Column, мы должны использовать класс sqlalchemy.schema.Index для указания индекса, который содержит несколько множественных индексов.

Однако, пример показывает, как сделать это, напрямую используя объект Table следующим образом:

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)

Как это сделать, если мы используем декларативное расширение ORM?

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

Мне нужен индекс в столбцах "a" и "b".

4b9b3361

Ответ 1

это просто Column объекты, index = True флаг работает нормально:

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

если вам нужен составной индекс, снова Table присутствует здесь, как обычно, вам просто не нужно его объявлять, все работает одинаково (убедитесь, что вы используете последние 0,6 или 0,7 для декларативного Aa обертка, которая будет интерпретирована как Column после объявления класса):

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)

В 0.7 Index может быть также в аргументах Table, который с декларацией через __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"), )