как через sqlalchemy добавить индекс на 2 поля в таблице?

допустим есть класс Phrase:

import sqlalchemy as sa
from sqlalchemy.orm import declarative_base

Base = declarative_base()

lass Phrase(Base):
    __tablename__ = 'phrases'
    en_phrase = sa.Column(sa.Text)
    ru_phrase = sa.Column(sa.Text)

    def __init__(self, en, ru):
        self.en_phrase = en
        self.ru_phrase = ru

Нужно сделать один индекс на 2 поля: en_phrase и ru_phrase, можно ли как-то сделать его силами sqlalchemy?


Ответы (1 шт):

Автор решения: Andrew

нашел решение:

from sqlalchemy import Index 
index = Index('index__phrase__en_phrases__ru_phrases', Phrase.en_phrase, Phrase.ru_phrase)
index.create(bind=db)
# выведет: Index('index__en_phrases__ru_phrases', Column('en_phrase', Text(), table=<phrases>), Column('ru_phrase', Text(), table=<phrases>))

еще одно решение - при создании таблицы сразу указать

class Other(Base):
    __tablename__ = 'other'
    id = sa.Column(sa.Integer, primary_key=True)
    f_one = sa.Column(sa.Text)
    f_two = sa.Column(sa.Text)
    f_three = sa.Column(sa.Text)
    idx_one_two = sa.Index('idx_one_two', f_one, f_two)

    def __init__(self, one, two, three):
        self.one = one
        self.two = two 
        self.three = three
→ Ссылка