Функция identity_key
Функция identity_key из модуля sqlalchemy.orm
возвращает ключ идентичности объекта ORM. Ключ идентичности
представляет собой кортеж, который однозначно определяет
строку в таблице базы данных. Первым параметром можно
передать класс модели, а вторым - значение первичного ключа.
Также можно передать экземпляр объекта ORM в качестве
первого параметра, и функция сама извлечет из него
необходимые данные.
Функция полезна при работе с сессией, кешем идентичности и при отладке, когда нужно понять, как SQLAlchemy идентифицирует конкретный объект.
Синтаксис
identity_key(class_, ident)
identity_key(instance)
Пример
Давайте получим ключ идентичности для класса модели и значения первичного ключа:
from sqlalchemy import create_engine, Integer, String
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, identity_key
class Base(DeclarativeBase):
pass
class Article(Base):
__tablename__ = 'articles'
id: Mapped[int] = mapped_column(primary_key=True)
title: Mapped[str] = mapped_column(String)
key = identity_key(Article, 1)
print(key)
Результат выполнения кода:
(<class '__main__.Article'>, (1,), None)
Пример
Давайте передадим в функцию экземпляр объекта ORM:
from sqlalchemy import create_engine, Integer, String
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, identity_key
class Base(DeclarativeBase):
pass
class Article(Base):
__tablename__ = 'articles'
id: Mapped[int] = mapped_column(primary_key=True)
title: Mapped[str] = mapped_column(String)
article = Article(id=1, title='article')
key = identity_key(instance=article)
print(key)
Результат выполнения кода:
(<class '__main__.Article'>, (1,), None)
Пример
Давайте сохраним объект в базе данных и получим его ключ идентичности через сессию:
from sqlalchemy import create_engine, Integer, String
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, Session, identity_key
class Base(DeclarativeBase):
pass
class Article(Base):
__tablename__ = 'articles'
id: Mapped[int] = mapped_column(primary_key=True)
title: Mapped[str] = mapped_column(String)
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
with Session(engine) as session:
article = Article(title='article')
session.add(article)
session.commit()
key = identity_key(instance=article)
print(key)
Результат выполнения кода:
(<class '__main__.Article'>, (1,), None)
Смотрите также
-
функцию
inspect,
которая создает объект инспектора для анализа ORM-объектов -
функцию
instance_state,
которая возвращает состояние экземпляра объекта ORM -
функцию
identity_key,
которая возвращает ключ идентичности объекта ORM -
класс
Session,
который управляет жизненным циклом объектов ORM