Атрибут index класса Column
Атрибут index класса Column указывает,
нужно ли создавать индекс для данного столбца.
Принимает булево значение: True создает
обычный индекс, False (значение по умолчанию)
не создает индекс. Также можно передать строку,
которая задаст имя индекса.
Синтаксис
Column(..., index=True)
Column(..., index=False)
Column(..., index='custom_index_name')
Пример
Давайте создадим таблицу с индексом на столбце
title и выведем список индексов:
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.orm import DeclarativeBase
class Base(DeclarativeBase):
pass
class Article(Base):
__tablename__ = 'articles'
id: Column = Column(Integer, primary_key=True)
title: Column = Column(String, index=True)
text: Column = Column(String)
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
for idx in Article.__table__.indexes:
print(idx.name)
Результат выполнения кода:
"ix_articles_title"
Пример
Давайте зададим собственное имя индекса через строку:
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.orm import DeclarativeBase
class Base(DeclarativeBase):
pass
class Article(Base):
__tablename__ = 'articles'
id: Column = Column(Integer, primary_key=True)
title: Column = Column(String, index='my_title_index')
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
for idx in Article.__table__.indexes:
print(idx.name)
Результат выполнения кода:
"my_title_index"
Пример
Давайте посмотрим SQL-запрос, который создает индекс для столбца:
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.orm import DeclarativeBase
from sqlalchemy.schema import CreateIndex
class Base(DeclarativeBase):
pass
class Article(Base):
__tablename__ = 'articles'
id: Column = Column(Integer, primary_key=True)
title: Column = Column(String, index=True)
engine = create_engine('sqlite:///:memory:')
for idx in Article.__table__.indexes:
print(CreateIndex(idx).compile(engine))
Итоговый SQL запрос:
CREATE INDEX ix_articles_title ON articles (title)
Смотрите также
-
класс
Column,
который представляет столбец таблицы -
атрибут
unique,
который создает уникальное ограничение -
атрибут
primary_key,
который делает столбец первичным ключом -
атрибут
name,
который задает имя столбца в базе данных