Метод get_one
Метод get_one класса Session возвращает
ровно одну запись из базы данных по первичному ключу.
В отличие от метода get, который возвращает
None при отсутствии записи, метод get_one
вызывает исключение NoResultFound, если запись
не найдена, и MultipleResultsFound, если
найдено несколько записей. Первым параметром метод
принимает класс модели, вторым - значение первичного
ключа. Дополнительно можно передать параметр
options со списком опций загрузки.
Синтаксис
Session.get_one(entity, ident, [options])
Пример
Давайте создадим сессию, добавим статью и получим
ее методом get_one по первичному ключу:
from sqlalchemy import create_engine, String
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, Session
class Base(DeclarativeBase):
pass
class Article(Base):
__tablename__ = 'articles'
id: Mapped[int] = mapped_column(primary_key=True)
title: Mapped[str] = mapped_column(String(50))
text: Mapped[str] = mapped_column(String(200))
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
with Session(engine) as session:
session.add(Article(title='article', text='some text'))
session.commit()
res = session.get_one(Article, 1)
print(res.title)
Результат выполнения кода:
"article"
Пример
Давайте попробуем получить несуществующую запись и посмотрим, какое исключение будет вызвано:
from sqlalchemy import create_engine, String
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, Session
from sqlalchemy.exc import NoResultFound
class Base(DeclarativeBase):
pass
class Article(Base):
__tablename__ = 'articles'
id: Mapped[int] = mapped_column(primary_key=True)
title: Mapped[str] = mapped_column(String(50))
text: Mapped[str] = mapped_column(String(200))
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
with Session(engine) as session:
try:
res = session.get_one(Article, 999)
except NoResultFound:
print('no result found')
Результат выполнения кода:
"no result found"