2016-12-23 1 views
0

Я подключаюсь к базе данных SQLite. При запросе базы данных в python он возвращает объект кортежа. Я предпочитаю работать с namedtuple. Проблема в том, что я не могу проходить через объект более одного раза. Я не уверен, что проблема связана с тем, как я создаю объект, или если это связано с тем, как я назначаю данные объекту. Вот что у меня есть:Получить Iterator Tuple из SQLite Query

import sys 
import sqlite3 
from collections import namedtuple 

data = namedtuple('data', 'id, name') 
conn = sqlite3.connect('database.db') 
c = conn.cursor() 

c.execute('SELECT id,name FROM my_table;') 
data = map(data._make, c.fetchall()) 
conn.close() 

for id in data: 
    print (table.id) 

for id in data: 
    print (table.id) 

>>>123 
>>>456 
>>>789 

Сейчас в таблице всего 3 записи. Поэтому я должен повторить все 3 записи из-за второго цикла, но я этого не делаю.

Я попытался изменить некоторые линии, похожие на то, что показано на Docs page, но это не помогло.

+1

На python3.x, 'map' возвращает итерируемый объект, который не может повторяться несколько раз. Вы можете попробовать 'data = list (map (data._make, c.fetchall()))' ... – mgilson

ответ

0

Как отправил mgilson, data = map(data._make, c.fetchall()) необходимо изменить на data = list(map(data._make, c.fetchall())).