все Python 3sqlite3понятие
sqlite3.Row
соединение и запросы
Строка результата с доступом к столбцам и по номеру, и по имени: row['name']. Включается присваиванием conn.row_factory = sqlite3.Row.
Синтаксис
conn.row_factory = sqlite3.Row; row['column']
Без row_factory запрос возвращает обычные кортежи, и код ломается при каждой перестановке столбцов в SELECT. Имя столбца ищется без учёта регистра: row['NAME'] найдёт столбец name. print(row) показывает лишь <sqlite3.Row object ...> — для отладки и JSON превращайте в dict(row); keys() даёт имена столбцов. Атрибутного доступа row.name нет — только квадратные скобки.
Примеры
import sqlite3
conn = sqlite3.connect(':memory:')
conn.row_factory = sqlite3.Row
row = conn.execute("SELECT 1 AS id, 'ann' AS name").fetchone()
print(row['name'], row['NAME'], row[0]) # → ann ann 1
print(row.keys()) # → ['id', 'name']
print(dict(row)) # → {'id': 1, 'name': 'ann'}
conn.close()
import sqlite3
conn = sqlite3.connect(':memory:')
conn.row_factory = sqlite3.Row
row = conn.execute("SELECT 'ann' AS name").fetchone()
try:
print(row.name)
except AttributeError:
print('нет row.name — только row["name"]') # → нет row.name — только row["name"]
conn.close()
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности