Атрибут _fields
Атрибут _fields класса Row возвращает
кортеж строк с именами полей (колонок), которые
содержатся в данной строке результата. Этот атрибут
удобно использовать, когда нужно программно узнать
структуру результата запроса, например, для вывода
заголовков таблицы или преобразования строки в словарь.
Атрибут доступен как у самого объекта строки, так и
через класс Row.
Синтаксис
row._fields
Пример
Давайте выполним простой запрос и посмотрим,
что вернет атрибут _fields:
from sqlalchemy import create_engine, text
engine = create_engine('sqlite:///:memory:')
with engine.connect() as conn:
res = conn.execute(text('SELECT 1 AS num, "article" AS title'))
row = res.first()
print(row._fields)
Результат выполнения кода:
('num', 'title')
Пример
Давайте создадим таблицу, наполним ее данными и изучим имена полей строки результата:
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, '
'status TEXT)'
))
conn.execute(text(
"INSERT INTO articles (id, title, status) "
"VALUES (1, 'article', 'published')"
))
conn.commit()
res = conn.execute(text('SELECT * FROM articles'))
row = res.first()
print(row._fields)
Результат выполнения кода:
('id', 'title', 'status')
Пример
Давайте используем _fields вместе с
_asdict, чтобы получить словарь строки:
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, '
'num INTEGER)'
))
conn.execute(text(
"INSERT INTO articles (id, title, num) "
"VALUES (1, 'article', 10)"
))
conn.commit()
res = conn.execute(text('SELECT * FROM articles'))
row = res.first()
for field in row._fields:
print(field, '=', row._asdict()[field])
Результат выполнения кода:
id = 1
title = article
num = 10