Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
15 of 711 menu
◀ ▶

Метод first класса Session

Метод first класса Session возвращает первую строку из результата выполнения запроса. Если записей нет, метод возвращает None. Метод принимает на вход объект запроса или SQL-выражение и автоматически ограничивает выборку одной записью. Это удобный способ получить одну запись без необходимости вызывать scalars и one_or_none.

Синтаксис

session.first(statement)

Пример

Давайте создадим модель и получим первую запись из таблицы articles:

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(100)) text: Mapped[str] = mapped_column(String(500)) status: Mapped[str] = mapped_column(String(50)) num: Mapped[int] engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) with Session(engine) as session: session.add_all([ Article(title='article 1', text='text 1', status='active', num=1), Article(title='article 2', text='text 2', status='active', num=2), Article(title='article 3', text='text 3', status='draft', num=3), ]) session.commit() res = session.first( session.query(Article).order_by(Article.id) ) print(res.title)

Результат выполнения кода:

"article 1"

Пример

Давайте убедимся, что метод возвращает None, если записей нет:

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(100)) text: Mapped[str] = mapped_column(String(500)) status: Mapped[str] = mapped_column(String(50)) num: Mapped[int] engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) with Session(engine) as session: res = session.first( session.query(Article).filter(Article.status == 'deleted') ) print(res)

Результат выполнения кода:

None

Пример

Давайте получим первую запись с сортировкой по убыванию поля num:

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(100)) text: Mapped[str] = mapped_column(String(500)) status: Mapped[str] = mapped_column(String(50)) num: Mapped[int] engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) with Session(engine) as session: session.add_all([ Article(title='article 1', text='text 1', status='active', num=1), Article(title='article 2', text='text 2', status='active', num=2), Article(title='article 3', text='text 3', status='draft', num=3), ]) session.commit() res = session.first( session.query(Article).order_by(Article.num.desc()) ) print(res.title)

Результат выполнения кода:

"article 3"

Пример

Давайте посмотрим итоговый SQL-запрос, который формирует метод first:

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(100)) text: Mapped[str] = mapped_column(String(500)) status: Mapped[str] = mapped_column(String(50)) num: Mapped[int] engine = create_engine('sqlite:///:memory:', echo=True) Base.metadata.create_all(engine) with Session(engine) as session: res = session.first(session.query(Article))

Итоговый SQL запрос:

SELECT articles.id AS articles_id, articles.title AS articles_title, articles.text AS articles_text, articles.status AS articles_status, articles.num AS articles_num FROM articles LIMIT ? OFFSET ?

Смотрите также

  • класс Session,
    который управляет сессией работы с базой данных
  • метод one_or_none,
    который возвращает одну запись или None
  • метод scalar,
    который возвращает первый столбец первой записи
  • метод execute,
    который выполняет SQL-выражение
← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить