Метод scalar класса Session
Метод scalar класса Session выполняет
SQL-запрос и возвращает значение первого столбца
первой строки результата. Если строк нет, метод
возвращает None. Первым параметром метод
принимает запрос или SQL-выражение, далее могут
передаваться параметры запроса.
Синтаксис
session.scalar(statement, [params])
Пример
Давайте создадим сессию и таблицу, а затем
получим количество строк через метод scalar:
from sqlalchemy import create_engine, text
from sqlalchemy.orm import Session
engine = create_engine('sqlite:///:memory:')
with Session(engine) as session:
session.execute(text('CREATE TABLE articles (id INTEGER, title TEXT)'))
session.execute(text("INSERT INTO articles (id, title) VALUES (1, 'article 1')"))
session.execute(text("INSERT INTO articles (id, title) VALUES (2, 'article 2')"))
session.commit()
res = session.scalar(text('SELECT COUNT(*) FROM articles'))
print(res)
Результат выполнения кода:
2
Пример
Давайте получим значение одного столбца первой строки из таблицы:
from sqlalchemy import create_engine, text
from sqlalchemy.orm import Session
engine = create_engine('sqlite:///:memory:')
with Session(engine) as session:
session.execute(text('CREATE TABLE articles (id INTEGER, title TEXT)'))
session.execute(text("INSERT INTO articles (id, title) VALUES (1, 'article 1')"))
session.execute(text("INSERT INTO articles (id, title) VALUES (2, 'article 2')"))
session.commit()
res = session.scalar(text('SELECT title FROM articles ORDER BY id'))
print(res)
Результат выполнения кода:
"article 1"
Пример
Давайте передадим параметр в запрос и получим значение по условию:
from sqlalchemy import create_engine, text
from sqlalchemy.orm import Session
engine = create_engine('sqlite:///:memory:')
with Session(engine) as session:
session.execute(text('CREATE TABLE articles (id INTEGER, title TEXT)'))
session.execute(text("INSERT INTO articles (id, title) VALUES (1, 'article 1')"))
session.execute(text("INSERT INTO articles (id, title) VALUES (2, 'article 2')"))
session.commit()
res = session.scalar(
text('SELECT title FROM articles WHERE id = :id'),
{'id': 2}
)
print(res)
Результат выполнения кода:
"article 2"
Пример
Давайте рассмотрим поведение метода, когда подходящих строк в таблице нет:
from sqlalchemy import create_engine, text
from sqlalchemy.orm import Session
engine = create_engine('sqlite:///:memory:')
with Session(engine) as session:
session.execute(text('CREATE TABLE articles (id INTEGER, title TEXT)'))
session.commit()
res = session.scalar(text('SELECT title FROM articles WHERE id = :id'), {'id': 1})
print(res)
Результат выполнения кода:
None
Смотрите также
-
класс
Session,
который представляет сессию работы с базой -
метод
execute,
который выполняет запрос и возвращает результат -
метод
scalars,
который возвращает первый столбец всех строк -
метод
scalar_one,
который требует ровно одну строку в результате