2014-09-10 10 views
5

Ich verwende pyodbc, um eine Verbindung zu einer Datenbank herzustellen und bestimmte Daten daraus zu extrahieren.Funktionssequenzfehler in PYODBC

Hier ist mein Code:

con = pyodbc.connect("driver={SQL Server};server= MyServer;database= MyDatabase;trusted_connection=true") 

cursor = con.cursor() 

SQL_command = """ 
         SELECT RowID = ISNULL 
         (
          (
           SELECT TOP 1 RowID 
           FROM [MyDatabase].[admin].[MyTable] 
           WHERE [queue] = ? and processed IS NULL 
         ) 
          ,-1 
        ) 
        """ 

cursor.execute(SQL_command, queueNumber) 

cursor.commit() 

con.commit() 

result_set = cursor.fetchall() 

Und ich habe folgenden Fehler, nachdem ich über Code ausführen:

pyodbc.Error: ('HY010', '[HY010] [Microsoft][ODBC SQL Server Driver]Function sequence error (0) (SQLFetch)')

Darf ich wissen, was ein solches Problem verursacht, und wie kann ich es beheben?

Danke.

Antwort

12

Ich glaube, Ihr Problem ist die seltsame commit Aussagen. Sie müssen nur commit beim Einfügen oder Aktualisieren von Datensätzen nicht auswählen.

cursor.execute(SQL_command, queueNumber) 
result_set = cursor.fetchall() 

Auch in Zukunft, bei der Verwendung von commit, beide cursor.commit und con.commit das gleiche tun, was Sie brauchen nur einen.

Schließlich habe ich gewöhnen würde, um mit dem zweiten Argument als Tupel ausführen Aufruf:

cursor.execute(SQL_command, (queueNumber,)) 

Die Art und Weise haben Sie es für pyodbc funktioniert aber nicht DB-API-Standard.