Python Glossary English

все 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Сообщить о неточности