2017-01-07 3 views
1

Ich habe SQLite und ich Abfrage zwei Spalten aus einer Tabelle wie folgt aus:Kann nicht SQLite Abfrage in separate Listen Python setzen

result_set = conn.execute("SELECT time, MeanCurrent from MEASUREMENTS") 

dann, ich will jede Spalte in eine separate Liste setzen, was ich m so weit zu tun, ist dies:

list1 = [record[0] for record in result_set] 
list2 = [record[1] for record in result_set] 

Das Problem ist, dass, während list1 druckt die erste Spalte perfekt, list2 leer angezeigt wird, während, wenn ich die erste Zeile zu entfernen, list2 die zweite Spalte druckt perfekt, wie gut!

So ist es, nach der ersten Zeile Ausführung ändert sich etwas in meiner Abfrage, aber ich weiß nicht was.

Gibt es eine Möglichkeit, damit umzugehen?

+0

Ich weiß nicht genug Python, um dies mit der tatsächlichen Syntax auszudrücken, aber ich würde die Arrays definieren, dann eine Schleife haben, um über die 'result_set' zu iterieren und die Felder der 'record' in die Listenarrays zu schieben . – simbabque

Antwort

3

conn.execute() gibt ein Cursor-Objekt zurück. Sie können nicht mehr als einmal über einen Cursor iterieren; Wenn Sie das Ende erreicht haben, wird es beim erneuten Iterieren nicht mehr am Anfang beginnen. Entweder laden Sie zuerst alle Zeilen in eine Liste oder verwenden eine andere Technik, die nur einmal durchlaufen muss.

würde ich die zip() function verwenden, um Spalten zu paaren:

list1, list2 = zip(*result_set) 

aber man konnte results = list(result_set) oder results = result_set.fetchall(), um alle Zeilen in eine Liste materialisieren ersten verwenden, oder Sie können eine einzelne Schleife verwenden, die list1.append() und list2.append() verwendet um die Spaltenwerte zu den zwei Listen hinzuzufügen.

+0

Vielen Dank, wir haben so viel Zeit damit verbracht, es herauszufinden! – tzoukritzou