Объект sqlite3.Row
служит высоко оптимизированным row_factory
для объектов Connection
. Он пытается имитировать кортеж в большинстве своих функций.
Он поддерживает доступ к результату запроса как к словарю, где ключ это имя столбца. Так же поддерживает обращение к столбцу по индексу, итерацию по строкам запроса, проверку на равенство и встроенную функцию len()
для подсчета количества строк запроса.
Если два объекта подряд имеют одинаковые столбцы, а их элементы равны, то эти объекты считаются равными.
sqlite3.Row
.cursor.keys()
:Метод cursor.keys()
возвращает список имен столбцов. Сразу после запроса, это первый элемент каждого кортежа в Cursor.description
.
Инициализируем базу и вставим таблицу,:
conn = sqlite3.connect(":memory:") c = conn.cursor() c.execute('''create table stocks (date text, trans text, symbol text, qty real, price real)''') c.execute("""insert into stocks values ('2006-01-05','BUY','RHAT',100,35.14)""") conn.commit() c.close()
Теперь подключим класс sqlite3.Row
:
>>> conn.row_factory = sqlite3.Row >>> cursor = conn.cursor() >>> cursor.execute('select * from stocks') # <sqlite3.Cursor object at 0x7f4e7dd8fa80> >>> r = cursor.fetchone() >>> type(r) # <class 'sqlite3.Row'> >>> tuple(r) # ('2006-01-05', 'BUY', 'RHAT', 100.0, 35.14) >>> len(r) # 5 >>> r[2] # 'RHAT' >>> r.keys() # ['date', 'trans', 'symbol', 'qty', 'price'] >>> r['qty'] # 100.0 >>> for member in r: ... print(member) ... # 2006-01-05 # BUY # RHAT # 100.0 # 35.14