РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
109 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 для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить