2016-06-12 5 views
1

Ich experimentiere Teradata Python-Modul Tutorial hereTeradata Python-Modul Cursor-Ergebnismenge wird nach einer Iteration erschöpft

ich eine Abfrage bin Ausführung und ich möchte über das Ergebnis mehrmals auf laufen. Das Problem ist, dass, wenn ich einmal über die Ergebnismenge iteriere, ich es nicht noch einmal machen kann. Es sieht so aus, als wäre die Ergebnismenge erschöpft und für weitere Berechnungen nicht mehr verfügbar.

Bitte lesen Sie den folgenden Code für Details und schlagen vor, wie ich die Ergebnismenge erhalten kann.

import teradata 

class DB(): 
    def __init__(self): 
     udaExec = teradata.UdaExec (appName="HelloWorld", version="1.0",logConsole=False) 
     session = udaExec.connect(method="odbc", system="tddemo",username="dbc", password="dbc") 
     self.session = session 

    def fun1(self): 
     rows = self.session.execute("SELECT databasename, ownername FROM DBC.DATABASES where DatabaseName='financial'") 
     return rows 

db = DB() 
rows = db.fun1() 

# This loop prints accurate result like 
#Row 1: [financial, Samples] 
for row in rows: 
    print(row) 

# This loop does not print anything 
for row in rows: 
    print(row) 

# This line also gets printed 
print("The End") 

Antwort

1

Generatoren können nur einmal iteriert werden, verwenden list oder tuple sie, konvertieren und dann können Sie über ihn mehrmals durchlaufen:

rows = tuple(db.func1()) 

for row in rows: 
    # do something 

for row in rows: # would work 
    # do something else 
+0

Können Sie kurz erklären, was Generatoren sind? Ich bin neu in Python – Ali

+0

@Ali Dies ist eine gute Einführung: http://StackOverflow.com/Questions/1756096/understanding-generator-in-Python – noteness