Класс ScalarResult
Класс ScalarResult представляет собой
обертку над результатом выполнения запроса,
возвращающую скалярные значения (отдельные
колонки) вместо полных строк результата.
Объект этого класса возвращается методами
scalars и scalar объекта
Result. Класс предоставляет методы
для итерации, получения первого элемента,
единственного элемента и проверки наличия
результатов.
Синтаксис
ScalarResult
Пример
Давайте создадим таблицу и получим
скалярный результат с помощью метода
scalars:
from sqlalchemy import create_engine, text
engine = create_engine('sqlite:///:memory:')
with engine.connect() as conn:
conn.execute(text('CREATE TABLE articles (id INTEGER, title TEXT)'))
conn.execute(text("INSERT INTO articles VALUES (1, 'article')"))
res = conn.execute(text('SELECT title FROM articles')).scalars()
print(res)
Результат выполнения кода:
<sqlalchemy.engine.result.ScalarResult object at 0x...>
Пример
Давайте переберем все скалярные значения в цикле:
from sqlalchemy import create_engine, text
engine = create_engine('sqlite:///:memory:')
with engine.connect() as conn:
conn.execute(text('CREATE TABLE articles (id INTEGER, title TEXT)'))
conn.execute(text("INSERT INTO articles VALUES (1, 'article')"))
conn.execute(text("INSERT INTO articles VALUES (2, 'user')"))
res = conn.execute(text('SELECT title FROM articles')).scalars()
for title in res:
print(title)
Результат выполнения кода:
'article'
'user'
Пример
Давайте получим первый элемент
с помощью метода first:
from sqlalchemy import create_engine, text
engine = create_engine('sqlite:///:memory:')
with engine.connect() as conn:
conn.execute(text('CREATE TABLE articles (id INTEGER, title TEXT)'))
conn.execute(text("INSERT INTO articles VALUES (1, 'article')"))
conn.execute(text("INSERT INTO articles VALUES (2, 'user')"))
res = conn.execute(text('SELECT title FROM articles')).scalars()
print(res.first())
Результат выполнения кода:
'article'
Пример
Давайте получим единственный элемент
с помощью метода one:
from sqlalchemy import create_engine, text
engine = create_engine('sqlite:///:memory:')
with engine.connect() as conn:
conn.execute(text('CREATE TABLE articles (id INTEGER, title TEXT)'))
conn.execute(text("INSERT INTO articles VALUES (1, 'article')"))
res = conn.execute(text('SELECT title FROM articles')).scalars()
print(res.one())
Результат выполнения кода:
'article'
Пример
Давайте получим единственный элемент
или None с помощью метода
one_or_none:
from sqlalchemy import create_engine, text
engine = create_engine('sqlite:///:memory:')
with engine.connect() as conn:
conn.execute(text('CREATE TABLE articles (id INTEGER, title TEXT)'))
conn.execute(text("INSERT INTO articles VALUES (1, 'article')"))
res = conn.execute(text('SELECT title FROM articles WHERE id = 999')).scalars()
print(res.one_or_none())
Результат выполнения кода:
None
Пример
Давайте получим все элементы в виде
списка с помощью метода all:
from sqlalchemy import create_engine, text
engine = create_engine('sqlite:///:memory:')
with engine.connect() as conn:
conn.execute(text('CREATE TABLE articles (id INTEGER, title TEXT)'))
conn.execute(text("INSERT INTO articles VALUES (1, 'article')"))
conn.execute(text("INSERT INTO articles VALUES (2, 'user')"))
conn.execute(text("INSERT INTO articles VALUES (3, 'sqlite:///:memory:')"))
res = conn.execute(text('SELECT title FROM articles')).scalars()
print(res.all())
Результат выполнения кода:
['article', 'user', 'sqlite:///:memory:']
Смотрите также
-
класс
ScalarResult,
который представляет скалярный результат запроса -
метод
all,
который возвращает все элементы списком -
метод
first,
который возвращает первый элемент результата -
метод
one,
который возвращает единственный элемент результата