Метод one_or_none класса Result
Метод one_or_none класса Result
возвращает ровно одну строку результата.
Если запрос вернул ровно одну строку, метод
возвращает объект Row. Если строк нет,
метод возвращает None. Если строк больше
одной, метод возбуждает исключение
MultipleResultsFound. Параметры методу
не передаются.
Синтаксис
Result.one_or_none()
Пример
Давайте создадим таблицу articles,
добавим одну запись и получим ее методом
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 PRIMARY KEY, '
'title TEXT, '
'text TEXT, '
'status TEXT, '
'num INTEGER)'
))
conn.execute(text(
"INSERT INTO articles (title, text, status, num) "
"VALUES ('article', 'sqlite', 'published', 1)"
))
conn.commit()
res = conn.execute(text('SELECT * FROM articles'))
row = res.one_or_none()
print(row)
Результат выполнения кода:
(1, 'article', 'sqlite', 'published', 1)
Пример
Если запрос не вернул ни одной строки, метод
one_or_none возвращает 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 PRIMARY KEY, '
'title TEXT, '
'text TEXT, '
'status TEXT, '
'num INTEGER)'
))
conn.commit()
res = conn.execute(text('SELECT * FROM articles'))
row = res.one_or_none()
print(row)
Результат выполнения кода:
None
Пример
Если запрос вернул больше одной строки, метод
one_or_none возбуждает исключение
MultipleResultsFound:
<+python+>
from sqlalchemy import create_engine, text
from sqlalchemy.exc import MultipleResultsFound
engine = create_engine('sqlite:///:memory:')
with engine.connect() as conn:
conn.execute(text(
'CREATE TABLE articles ('
'id INTEGER PRIMARY KEY, '
'title TEXT, '
'text TEXT, '
'status TEXT, '
'num INTEGER)'
))
conn.execute(text(
"INSERT INTO articles (title, text, status, num) "
"VALUES ('article', 'sqlite', 'published', 1)"
))
conn.execute(text(
"INSERT INTO articles (title, text, status, num) "
"VALUES ('article', 'user', 'draft', 2)"
))
conn.commit()
res = conn.execute(text('SELECT * FROM articles'))
try:
row = res.one_or_none()
except MultipleResultsFound:
print('MultipleResultsFound')
<-python+>
Результат выполнения кода:
"MultipleResultsFound"
Смотрите также
-
класс
Result,
который представляет результат запроса -
метод
one,
который возвращает ровно одну строку -
метод
first,
который возвращает первую строку результата -
метод
scalar_one_or_none,
который возвращает одно скалярное значение или None