Метод has_index
Метод has_index класса Inspector проверяет,
существует ли индекс с указанным именем в заданной
таблице базы данных. Первым параметром метод принимает
имя таблицы, вторым - имя индекса. Дополнительно можно
передать схему через параметр schema. Метод
возвращает True, если индекс найден, и
False в противном случае.
Синтаксис
Inspector.has_index(table_name, index_name, [schema])
Пример
Давайте создадим таблицу с индексом и проверим
его наличие через метод has_index:
from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, Index
from sqlalchemy import inspect
engine = create_engine('sqlite:///:memory:')
metadata = MetaData()
articles = Table(
'articles', metadata,
Column('id', Integer, primary_key=True),
Column('title', String),
Column('text', String)
)
idx = Index('idx_articles_title', articles.c.title)
metadata.create_all(engine)
inspector = inspect(engine)
res = inspector.has_index('articles', 'idx_articles_title')
print(res)
Результат выполнения кода:
True
Пример
Давайте проверим наличие несуществующего индекса в таблице:
from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String
from sqlalchemy import inspect
engine = create_engine('sqlite:///:memory:')
metadata = MetaData()
articles = Table(
'articles', metadata,
Column('id', Integer, primary_key=True),
Column('title', String)
)
metadata.create_all(engine)
inspector = inspect(engine)
res = inspector.has_index('articles', 'idx_missing')
print(res)
Результат выполнения кода:
False
Пример
Давайте переберём все индексы таблицы и проверим
каждый через has_index:
from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, Index
from sqlalchemy import inspect
engine = create_engine('sqlite:///:memory:')
metadata = MetaData()
articles = Table(
'articles', metadata,
Column('id', Integer, primary_key=True),
Column('title', String),
Column('status', String)
)
Index('idx_articles_title', articles.c.title)
Index('idx_articles_status', articles.c.status)
metadata.create_all(engine)
inspector = inspect(engine)
for idx_info in inspector.get_indexes('articles'):
name = idx_info['name']
res = inspector.has_index('articles', name)
print(name, res)
Результат выполнения кода:
idx_articles_status True
idx_articles_title True
Смотрите также
-
класс
Inspector,
который предоставляет доступ к метаданным базы -
метод
get_indexes,
который возвращает список всех индексов таблицы -
метод
has_table,
который проверяет наличие таблицы в базе -
метод
has_schema,
который проверяет наличие схемы в базе