2016-12-01 1 views
1

ziehen Ich versuche, eine sehr einfache Aufgabe zu erfüllen:Python SQLite3: wollen Zeilen iterativ zu holen, aber Code wird jede zweite Zeile

  • eine Tabelle in SQLite erstellen
  • Legen Sie mehrere Zeilen
  • Abfrage eine einzelne Spalte in der Tabelle und ziehen zurück jede Reihe

Registerkarte Code zu erstellen:

import sqlite3 
sqlite_file = '/Users/User/Desktop/DB.sqlite' 
conn = sqlite3.connect(sqlite_file) 
c = conn.cursor() 

c.execute('''CREATE TABLE ListIDTable(ID numeric, Day numeric, Month 
numeric, MonthTxt text, Year numeric, ListID text, Quantity text)''') 


values_to_insert = [ 
(1,16,7,"Jul",2015,"XXXXXXX1","Q2"), 
(2,16,7,"Jul",2015,"XXXXXXX2","Q2"), 
(3,14,7,"Jul",2015,"XXXXXXX3","Q1"), 
(4,14,7,"Jul",2015,"XXXXXXX4","Q1")]  #Entries continue similarly 

c.executemany("INSERT INTO ListIdTable (ID, Day, Month, MonthTxt, 
Year, ListID, Quantity) values (?,?,?,?,?,?,?)", values_to_insert) 

conn.commit() 
conn.close() 

Wenn ich diese Tabelle in SQLite DB Browser anschaue, sieht alles gut aus.

Hier ist mein Code und Abfrage der obigen Tabelle, um zu versuchen:

import sqlite3 
sqlite_file = '/Users/User/Desktop/DB.sqlite' 
conn = sqlite3.connect(sqlite_file) 
conn.row_factory = sqlite3.Row 
c = conn.cursor() 

for row in c.execute('select * from ListIDTable'): 
    r = c.fetchone() 
    ID = r['ID'] 
    print (ID) 

ich einen Druck von 1 erhalten sollte, 2, 3, 4. Allerdings bekomme ich nur 2 und 4

Mein Code lädt tatsächlich 100 Einträge in die Tabelle, aber trotzdem, wenn ich abfrage, bekomme ich nur ID-Ausdrucke von geraden Zahlen (dh 2, 4, 6, 8 usw.).

Vielen Dank für weitere Hinweise zur Fehlerbehebung.

Antwort

2

Sie müssen nicht fetchone in der Schleife - die Schleife holt bereits die Werte (eins nach dem anderen). Wenn Sie fetchone während Sie iterieren, werden Sie nur die Hälfte der Daten, weil die Schleife ein holt und dann holen Sie sofort das nächste (ohne jemals an der einen suchen, der durch die Schleife geholt wurde):

for r in c.execute('select * from ListIDTable'): 
    ID = r['ID'] 
    print (ID) 
Verwandte Themen