Класс Inspector
Класс Inspector позволяет получить информацию о структуре базы данных: список таблиц, колонок, первичных и внешних ключей, индексов, представлений и других объектов схемы. Экземпляр класса создается с помощью функции inspect, первым параметром которой передается движок или соединение с базой данных.
Синтаксис
from sqlalchemy import inspect
inspector = inspect(engine)
Пример
Давайте создадим движок и получим инспектор для базы данных:
from sqlalchemy import create_engine, inspect
engine = create_engine('sqlite:///:memory:')
inspector = inspect(engine)
print(inspector)
Результат выполнения кода:
"<sqlalchemy.engine.reflection.Inspector object at 0x...>"
Пример
Давайте создадим таблицу и получим список имен таблиц через метод get_table_names:
from sqlalchemy import create_engine, inspect, text
engine = create_engine('sqlite:///:memory:')
with engine.connect() as conn:
conn.execute(text('CREATE TABLE articles (id INTEGER PRIMARY KEY, title VARCHAR)'))
conn.commit()
inspector = inspect(engine)
res = inspector.get_table_names()
print(res)
Результат выполнения кода:
['articles']
Пример
Давайте получим информацию о колонках таблицы articles через метод get_columns:
from sqlalchemy import create_engine, inspect, text
engine = create_engine('sqlite:///:memory:')
with engine.connect() as conn:
conn.execute(text('CREATE TABLE articles (id INTEGER PRIMARY KEY, title VARCHAR, text VARCHAR, status VARCHAR, num INTEGER)'))
conn.commit()
inspector = inspect(engine)
res = inspector.get_columns('articles')
for column in res:
print(column['name'], column['type'])
Результат выполнения кода:
id INTEGER
title VARCHAR
text VARCHAR
status VARCHAR
num INTEGER
Пример
Давайте проверим наличие таблицы в базе данных с помощью метода has_table:
from sqlalchemy import create_engine, inspect, text
engine = create_engine('sqlite:///:memory:')
with engine.connect() as conn:
conn.execute(text('CREATE TABLE articles (id INTEGER PRIMARY KEY, title VARCHAR)'))
conn.commit()
inspector = inspect(engine)
print(inspector.has_table('articles'))
print(inspector.has_table('users'))
Результат выполнения кода:
True
False
Пример
Давайте получим информацию о первичном ключе таблицы через метод get_pk_constraint:
from sqlalchemy import create_engine, inspect, text
engine = create_engine('sqlite:///:memory:')
with engine.connect() as conn:
conn.execute(text('CREATE TABLE articles (id INTEGER PRIMARY KEY, title VARCHAR)'))
conn.commit()
inspector = inspect(engine)
res = inspector.get_pk_constraint('articles')
print(res)
Результат выполнения кода:
{'constrained_columns': ['id'], 'name': None}
Пример
Давайте получим информацию о внешних ключах таблицы через метод get_foreign_keys:
from sqlalchemy import create_engine, inspect, text
engine = create_engine('sqlite:///:memory:')
with engine.connect() as conn:
conn.execute(text('CREATE TABLE users (id INTEGER PRIMARY KEY, name VARCHAR)'))
conn.execute(text('CREATE TABLE articles (id INTEGER PRIMARY KEY, user_id INTEGER, FOREIGN KEY (user_id) REFERENCES users (id))'))
conn.commit()
inspector = inspect(engine)
res = inspector.get_foreign_keys('articles')
for fk in res:
print(fk['constrained_columns'], '->', fk['referred_table'], fk['referred_columns'])
Результат выполнения кода:
['user_id'] -> users ['id']
Пример
Давайте получим список схем базы данных через метод get_schema_names:
from sqlalchemy import create_engine, inspect
engine = create_engine('sqlite:///:memory:')
inspector = inspect(engine)
res = inspector.get_schema_names()
print(res)
Результат выполнения кода:
['main']
Смотрите также
-
функцию
inspect,
которая создает объект инспектора -
метод
get_table_names,
который возвращает список имен таблиц -
метод
get_columns,
который возвращает информацию о колонках таблицы -
метод
has_table,
который проверяет существование таблицы