Функция inspect
Функция inspect создает объект инспектора,
который предоставляет доступ к внутренней структуре
различных объектов SQLAlchemy: движков, соединений,
сессий, маппированных классов и их экземпляров.
Первым параметром функция принимает объект для
инспектирования. Вторым необязательным параметром
можно передать флаг raiseerr, который
определяет поведение при невозможности создать
инспектор.
Синтаксис
inspect(subject, [raiseerr])
Пример
Давайте создадим инспектор для движка базы данных
SQLite в памяти:
from sqlalchemy import create_engine, inspect
engine = create_engine('sqlite:///:memory:')
insp = inspect(engine)
print(type(insp))
Результат выполнения кода:
<class 'sqlalchemy.engine.reflection.Inspector'>
Пример
Давайте создадим таблицу и получим информацию о ее колонках через инспектор:
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 TEXT, status VARCHAR, num INTEGER)'))
conn.commit()
insp = inspect(engine)
columns = insp.get_columns('articles')
for col in columns:
print(col['name'], col['type'])
Результат выполнения кода:
id INTEGER
title VARCHAR
text TEXT
status VARCHAR
num INTEGER
Пример
Давайте получим список всех таблиц в базе данных:
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.execute(text('CREATE TABLE users (id INTEGER PRIMARY KEY, name VARCHAR)'))
conn.commit()
insp = inspect(engine)
tables = insp.get_table_names()
print(tables)
Результат выполнения кода:
['articles', 'users']
Пример
Давайте создадим инспектор для экземпляра модели и получим информацию о его состоянии:
from sqlalchemy import create_engine, inspect, Integer, String
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, Session
class Base(DeclarativeBase):
pass
class Article(Base):
__tablename__ = 'articles'
id: Mapped[int] = mapped_column(Integer, primary_key=True)
title: Mapped[str] = mapped_column(String)
text: Mapped[str] = mapped_column(String)
status: Mapped[str] = mapped_column(String)
num: Mapped[int] = mapped_column(Integer)
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
with Session(engine) as session:
article = Article(title='article', text='text', status='active', num=1)
session.add(article)
session.commit()
insp = inspect(article)
print(insp.identity)
print(insp.transient)
print(insp.persistent)
Результат выполнения кода:
(1,)
False
True
Смотрите также
-
функцию
inspect,
которая создает объект инспектора -
атрибут
instance_state,
который возвращает состояние экземпляра модели -
функцию
identity_key,
которая возвращает идентификационный ключ объекта