2016-08-09 81 views
3

Zum Beispiel, wenn ich eine SQL-Abfrage in Python (mit pymssql) laufen:Kann ich mehr als einmal über einen Cursor in Pymssql iterieren?

cursor.execute("""SELECT * FROM TABLE""") 

Dann mache ich:

for row in cursor: 
    print row[0] 

aber dann möchte ich Schleife durch die Tabelle ein zweites Mal für eine andere Operation, wie folgt aus:

for row in cursor: 
    print row[1] 

(Offensichtlich ich in 1 Schleife beides tun könnte, ist dies nur zum Beispiel willen). Kann ich das tun, ohne die Abfrage erneut auszuführen?

Antwort

0

Nein, Cursor in Pymssql funktionieren wie ein Generator. Sobald Sie die Ergebnisse von ihnen erhalten, enthalten sie nicht mehr die Ergebnismenge.

Die einzige Möglichkeit besteht darin, die Abfrageergebnisse in einer Zwischenliste zu speichern.

Zum Beispiel:

import pymssql 
database = pymssql.connect() 
db_cursor = database.cursor() 
db_cursor.execute("""SELECT * FROM Table""") 
results = db_cursor.fetchall() 
for result in results: 
    print(result[0]) 
for result in results: 
    print(result[1]) 
0

Nein, können Sie nicht tun, als pymssql Cursor (Python-Generator) als Dateizeiger fast gleich ist und jede Zeile in Cursor ist als jede Zeile in der Datei gleicht und wenn Sie Überstreichen Sie eine Zeile, die Sie suchen müssen, um neu zu beginnen und wieder zu beginnen. Gleiches gilt für den Cursor. Sie müssen die Abfrage erneut ausführen, um Daten zu erhalten.