2017-04-26 1 views
0

Ich versuche zu holen Daten von AWS MariaDB zu holen:Python MySQL Cursor nicht Zeilen

cursor = self._cnx.cursor() 
stmt = ('SELECT * FROM flights') 

cursor.execute(stmt) 

print(cursor.rowcount) 
# prints 2 

for z in cursor: 
    print(z) 
# Does not iterate 

row = cursor.fetchone() 
# row is None 

rows = cursor.fetchall() 
# throws 'No result set to fetch from.' 

ich überprüfen kann, dass die Tabellendaten mit MySQL Workbench enthalten. Vermisse ich einen Schritt?

EDIT: re 2 Antworten:

res = cursor.execute(stmt) 
# res is None 

EDIT:

ich mit einer einzigen Datei neues Python-Projekt erstellt:

import mysql.connector 

try: 
    cnx = mysql.connector.connect(
     host='foobar.rds.amazonaws.com', 
     user='devuser', 
     password='devpasswd', 
     database='devdb' 
    ) 

    cursor = cnx.cursor() 
    #cursor = cnx.cursor(buffered=True) 

    cursor.execute('SELECT * FROM flights') 

    print(cursor.rowcount) 
    rows = cursor.fetchall() 

except Exception as exc: 
    print(exc) 

Wenn ich diesen Code mit einfachen Cursor ausführen, fetchall löst "Kein Ergebnis abholen ab". Wenn ich mit gepuffertem Cursor laufe, kann ich sehen, dass _rows Eigenschaft des Cursors meine Daten enthält, aber fetchall() gibt leeres Array zurück.

Antwort

1

Sie müssen entweder:

row = cursor.execute(stmt).fetchone() 

Oder:

rows = cursor.execute(stmt).fetchall() 
+0

execute returns None, so dass fetch und fetchall eine Exception über die Methode aufrufen on None type – jpou

+0

Da läuft noch etwas anderes. Ist das dein vollständiger Code? – bernie

0

Ihr Problem ist, dass cursor.execute(stmt) ein Objekt mit den Ergebnissen zurück, und Sie sind nicht zu speichern.

results = cursor.execute(stmt) print(results.fetchone()) # Prints out and pops first row

+0

execute resturns None, so löst dies eine Exception über die Aufrufmethode für den None-Typ aus – jpou

+0

Hmmm ... Ich glaube, ich habe einige Details darüber gefunden, was Ihr Cursor möglicherweise zurückgibt. Vielleicht ist es nicht richtig eingerichtet? https://dev.mysql.com/doc/connector-python/en/connector-python-api-mysqlconnection-cursor.html –

0

Für die Zukunft Googler mit dem gleichen Problem fand ich eine Abhilfe, die in einigen Fällen helfen können:

Ich habe nicht die Ursache des Problems zu finden, aber eine Lösung, die für mich gearbeitet.

In meinem Fall .fetchone() gab auch nichts zurück, was ich auf meiner lokalen (auf meinem eigenen Computer) Datenbank tat. Ich habe den gleichen Code mit der Datenbank auf unserem Firmenserver versucht und irgendwie hat es funktioniert. Also habe ich die komplette Server-Datenbank auf meine lokale Datenbank kopiert (mit Hilfe von Datenbank-Dumps), nur um die Server-Einstellungen zu bekommen und danach konnte ich auch Daten von meinem lokalen SQL-Server mit dem Code bekommen, der vorher nicht funktionierte.

Ich bin ein SQL-Neuling, aber vielleicht einige verrückte Einstellung auf meinem lokalen SQL-Server hat mich daran gehindert, Daten zu holen. Vielleicht kennt ein erfahrener SQL-Benutzer diese Einstellung und kann dies erklären.

Verwandte Themen