Класс MappingResult
Класс MappingResult представляет собой
результат выполнения запроса, возвращаемый
методом mappings. Он позволяет
обращаться к столбцам результата по именам,
как к элементам словаря. Класс поддерживает
итерацию по строкам, индексацию и методы
для массового извлечения данных.
Синтаксис
res = connection.execute(statement).mappings()
Пример
Давайте выполним запрос и получим результат
в виде MappingResult:
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 * FROM articles')).mappings()
for row in res:
print(row['id'], row['title'])
Результат выполнения кода:
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 VALUES (1, 'article 1')"))
conn.execute(text("INSERT INTO articles VALUES (2, 'article 2')"))
res = conn.execute(text('SELECT * FROM articles')).mappings()
rows = res.all()
print(rows)
Результат выполнения кода:
[(1, 'article 1'), (2, 'article 2')]
Пример
Давайте получим первую строку результата
методом 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 1')"))
conn.execute(text("INSERT INTO articles VALUES (2, 'article 2')"))
res = conn.execute(text('SELECT * FROM articles')).mappings()
row = res.first()
print(row['title'])
Результат выполнения кода:
"article 1"
Пример
Давайте получим результат в виде списка
словарей методом 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, status TEXT)'))
conn.execute(text("INSERT INTO articles VALUES (1, 'article 1', 'published')"))
conn.execute(text("INSERT INTO articles VALUES (2, 'article 2', 'draft')"))
res = conn.execute(text('SELECT id, title, status FROM articles')).mappings()
for row in res:
print(dict(row))
Результат выполнения кода:
{'id': 1, 'title': 'article 1', 'status': 'published'}
{'id': 2, 'title': 'article 2', 'status': 'draft'}
Смотрите также
-
функцию
create_engine,
которая создает движок базы данных -
функцию
make_url,
которая разбирает строку URL подключения -
функцию
engine_from_config,
которая создает движок из словаря настроек -
класс
QueuePool,
который управляет пулом соединений