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

Метод mappings класса Result

Метод mappings класса Result возвращает объект MappingResult, который позволяет перебирать строки результата запроса в виде словарей. Ключами словаря выступают имена колонок, а значениями - соответствующие значения из строки. Это удобно, когда нужно получить данные по имени колонки, а не по индексу. Метод не принимает параметров и может быть вызван как у результата выполнения запроса, так и у результата выборки ORM.

Синтаксис

res.mappings()

Пример

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

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

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

{'id': 1, 'title': 'article 1'} {'id': 2, 'title': 'article 2'}

Пример

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

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, status TEXT)')) conn.execute(text("INSERT INTO articles VALUES (1, 'article', 'published')")) res = conn.execute(text('SELECT id, title, status FROM articles')) row = res.mappings().first() print(row['id'], row['title'], row['status'])

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

1 article published

Пример

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

from sqlalchemy import create_engine, String 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] = mapped_column(String(50)) status: Mapped[str] = mapped_column(String(20)) engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) with Session(engine) as session: session.add(Article(id=1, title='article', status='draft')) session.commit() res = session.query(Article.id, Article.title, Article.status).all() for row in res: print({'id': row.id, 'title': row.title, 'status': row.status}) res2 = session.execute( Article.__table__.select() ) for row in res2.mappings(): print(dict(row))

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

{'id': 1, 'title': 'article', 'status': 'draft'} {'id': 1, 'title': 'article', 'status': 'draft'}

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

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