Атрибут _t класса Row
Атрибут _t класса Row возвращает
внутренний кортеж значений строки результата.
Этот атрибут представляет собой обычный
Python-кортеж, содержащий все значения полей
в порядке их следования в выборке. Атрибут
не принимает параметров и доступен только
для чтения. Его удобно использовать, когда
нужно получить «сырые» данные строки без
обращения к именам столбцов.
Синтаксис
row._t
Пример
Давайте создадим таблицу и получим строку
результата, а затем обратимся к атрибуту
_t:
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, text TEXT, status TEXT, num INTEGER)'))
conn.execute(text("INSERT INTO articles VALUES (1, 'article', 'some text', 'draft', 10)"))
res = conn.execute(text('SELECT id, title, status FROM articles')).fetchone()
print(res._t)
Результат выполнения кода:
(1, 'article', 'draft')
Пример
Давайте убедимся, что атрибут _t
возвращает именно кортеж, и распакуем его
в отдельные переменные:
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, text TEXT, status TEXT, num INTEGER)'))
conn.execute(text("INSERT INTO articles VALUES (1, 'article', 'some text', 'draft', 10)"))
res = conn.execute(text('SELECT id, title, text, status, num FROM articles')).fetchone()
print(type(res._t))
id_, title, text_, status, num = res._t
print(title)
print(num)
Результат выполнения кода:
<class 'tuple'>
"article"
10
Пример
Давайте получим несколько строк и выведем
их кортежи через атрибут _t:
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, text TEXT, status TEXT, num INTEGER)'))
conn.execute(text("INSERT INTO articles VALUES (1, 'article', 'some text', 'draft', 10)"))
conn.execute(text("INSERT INTO articles VALUES (2, 'user', 'another text', 'published', 20)"))
res = conn.execute(text('SELECT id, title, status FROM articles ORDER BY id')).fetchall()
for row in res:
print(row._t)
Результат выполнения кода:
(1, 'article', 'draft')
(2, 'user', 'published')