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

Метод all

Метод all класса Result возвращает все оставшиеся строки результата запроса в виде списка. Каждая строка представлена объектом Row, который ведет себя как именованный кортеж и позволяет обращаться к значениям как по индексу, так и по имени колонки. Метод не принимает параметров и после вызова опустошает буфер результата, поэтому повторный вызов all вернет пустой список.

Синтаксис

Result.all()

Пример

Давайте выполним запрос к таблице articles и получим все строки методом 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 PRIMARY KEY, ' 'title TEXT, ' 'text TEXT, ' 'status TEXT, ' 'num INTEGER)' )) conn.execute(text( "INSERT INTO articles (title, text, status, num) " "VALUES ('article 1', 'text 1', 'draft', 10), " "('article 2', 'text 2', 'published', 20), " "('article 3', 'text 3', 'draft', 30)" )) conn.commit() res = conn.execute(text('SELECT * FROM articles')) rows = res.all() for row in rows: print(row)

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

(1, 'article 1', 'text 1', 'draft', 10) (2, 'article 2', 'text 2', 'published', 20) (3, 'article 3', 'text 3', 'draft', 30)

Пример

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

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 1', 'text 1', 'draft', 10), " "('article 2', 'text 2', 'published', 20)" )) conn.commit() res = conn.execute(text('SELECT * FROM articles')) rows = res.all() for row in rows: print(row.title, row.status, row.num)

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

article 1 draft 10 article 2 published 20

Пример

Давайте получим количество строк, вернувшихся из запроса, и убедимся, что повторный вызов 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 PRIMARY KEY, ' 'title TEXT, ' 'text TEXT, ' 'status TEXT, ' 'num INTEGER)' )) conn.execute(text( "INSERT INTO articles (title, text, status, num) " "VALUES ('article 1', 'text 1', 'draft', 10), " "('article 2', 'text 2', 'published', 20), " "('article 3', 'text 3', 'draft', 30)" )) conn.commit() res = conn.execute(text('SELECT * FROM articles')) rows = res.all() print('rows count:', len(rows)) again = res.all() print('second call:', again)

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

rows count: 3 second call: []

Пример

Давайте используем метод all вместе с ORM-запросом через Session:

from sqlalchemy import create_engine, text 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] text: Mapped[str] status: Mapped[str] 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='draft', num=10), Article(title='article 2', text='text 2', status='published', num=20), Article(title='article 3', text='text 3', status='draft', num=30), ]) session.commit() res = session.execute( text('SELECT * FROM articles WHERE status = :status'), {'status': 'draft'} ) rows = res.all() for row in rows: print(row.id, row.title, row.num)

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

1 article 1 10 3 article 3 30

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

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