РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
35 of 711 menu

Класс Result

Класс Result представляет собой объект, который возвращается при выполнении запроса через соединение или сессию. Он хранит результаты выполнения SQL-запроса и предоставляет набор методов для доступа к данным: извлечение строк, скалярных значений, словарей и работы с курсором. Объект Result создается автоматически при вызове методов execute, поэтому вручную его инстанцировать не требуется. Класс поддерживает итерацию, что позволяет перебирать строки результата напрямую.

Синтаксис

res = conn.execute(text('SELECT ...'))

Пример

Давайте выполним простой запрос и получим объект Result, а затем переберём его строки через итерацию:

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 (id, title) VALUES (1, 'article 1')")) conn.execute(text("INSERT INTO articles (id, title) VALUES (2, 'article 2')")) res = conn.execute(text('SELECT id, title FROM articles ORDER BY id')) print(type(res).__name__) for row in res: print(row)

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

"Result" (1, 'article 1') (2, 'article 2')

Пример

Давайте получим все строки результата методом 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 (id, title) VALUES (1, 'article 1')")) conn.execute(text("INSERT INTO articles (id, title) VALUES (2, 'article 2')")) res = conn.execute(text('SELECT id, title FROM articles ORDER BY id')) rows = res.all() print(rows)

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

[(1, 'article 1'), (2, 'article 2')]

Пример

Давайте извлечём одну строку методом first и получим скалярное значение методом scalar:

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 (id, title) VALUES (1, 'article 1')")) conn.execute(text("INSERT INTO articles (id, title) VALUES (2, 'article 2')")) res = conn.execute(text('SELECT id, title FROM articles ORDER BY id')) first_row = res.first() print(first_row) res2 = conn.execute(text('SELECT COUNT(*) FROM articles')) count = res2.scalar() print(count)

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

(1, 'article 1') 2

Пример

Давайте проверим атрибуты returns_rows, rowcount и closed у объекта Result:

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 (id, title) VALUES (1, 'article 1')")) conn.execute(text("INSERT INTO articles (id, title) VALUES (2, 'article 2')")) res = conn.execute(text('SELECT id, title FROM articles')) print(res.returns_rows) print(res.rowcount) print(res.closed) res.close() print(res.closed)

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

True 2 False True

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

  • метод all,
    который возвращает все строки результата списком
  • метод first,
    который возвращает первую строку результата
  • метод scalar,
    который возвращает первое скалярное значение
  • атрибут rowcount,
    который хранит количество строк в результате
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить