Метод create класса Index
Метод create класса Index создает индекс
в базе данных. Первым параметром метод принимает объект
подключения bind, через который выполняется
SQL-запрос на создание индекса. Если индекс уже существует,
будет вызвано исключение, если не указан параметр
checkfirst.
Синтаксис
Index.create(bind, [checkfirst])
Пример
Давайте создадим таблицу articles и индекс
по столбцу title, а затем вызовем метод
create:
from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, Index
engine = create_engine('sqlite:///:memory:')
metadata = MetaData()
articles = Table(
'articles', metadata,
Column('id', Integer, primary_key=True),
Column('title', String),
Column('text', String),
Column('status', String),
Column('num', Integer)
)
metadata.create_all(engine)
title_index = Index('ix_articles_title', articles.c.title)
with engine.connect() as conn:
title_index.create(conn)
print('Index created')
Результат выполнения кода:
"Index created"
Пример
Давайте используем параметр checkfirst, чтобы
избежать ошибки при повторном создании индекса:
from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, Index
engine = create_engine('sqlite:///:memory:')
metadata = MetaData()
articles = Table(
'articles', metadata,
Column('id', Integer, primary_key=True),
Column('title', String),
Column('text', String),
Column('status', String),
Column('num', Integer)
)
metadata.create_all(engine)
title_index = Index('ix_articles_title', articles.c.title)
with engine.connect() as conn:
title_index.create(conn, checkfirst=True)
title_index.create(conn, checkfirst=True)
print('Index created twice safely')
Результат выполнения кода:
"Index created twice safely"
Пример
Давайте создадим составной индекс по столбцам
status и num:
from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, Index
engine = create_engine('sqlite:///:memory:')
metadata = MetaData()
articles = Table(
'articles', metadata,
Column('id', Integer, primary_key=True),
Column('title', String),
Column('text', String),
Column('status', String),
Column('num', Integer)
)
metadata.create_all(engine)
composite_index = Index('ix_articles_status_num', articles.c.status, articles.c.num)
with engine.connect() as conn:
composite_index.create(conn)
print('Composite index created')
Результат выполнения кода:
"Composite index created"