Атрибут _mapping класса Row
Атрибут _mapping класса Row возвращает объект
RowMapping, который предоставляет доступ к значениям
строки результата по именам колонок. В отличие от самого
объекта Row, где доступ осуществляется по индексам,
_mapping позволяет обращаться к значениям как к
элементам словаря: по ключу-имени колонки. Это особенно
удобно при работе с запросами, где важен порядок колонок
или когда нужно преобразовать строку в словарь.
Атрибут не принимает параметров и доступен только для
чтения. Объект RowMapping поддерживает методы
keys, values, items, get,
а также оператор in для проверки наличия ключа.
Синтаксис
row._mapping
Пример
Давайте создадим таблицу, выполним запрос и получим первую строку результата:
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')"))
res = conn.execute(text('SELECT id, title FROM articles')).first()
print(res)
Результат выполнения кода:
(1, 'article')
Пример
Теперь обратимся к значениям строки по именам колонок
через атрибут _mapping:
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')"))
res = conn.execute(text('SELECT id, title FROM articles')).first()
print(res._mapping['id'])
print(res._mapping['title'])
Результат выполнения кода:
1
'article'
Пример
Атрибут _mapping можно преобразовать в обычный
словарь с помощью функции dict:
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')"))
res = conn.execute(text('SELECT id, title FROM articles')).first()
print(dict(res._mapping))
Результат выполнения кода:
{'id': 1, 'title': 'article'}
Пример
Объект RowMapping поддерживает методы keys
и items, что позволяет перебирать колонки и
значения:
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')"))
res = conn.execute(text('SELECT id, title FROM articles')).first()
print(list(res._mapping.keys()))
print(list(res._mapping.items()))
Результат выполнения кода:
['id', 'title']
[('id', 1), ('title', 'article')]