2015-05-24 17 views
9

Ich versuche, auf einer lokalen MySQL-Datenbank unter Verwendung von Python abzufragen (3.4) MySQL-Modul mit dem folgenden Code:Warum würde MySQL die Rückgabe None ausführen?

class databases(): 

    def externaldatabase(self): 

    try: 
    c = mysql.connector.connect(host="127.0.0.1", user="user", 
           password="password", database="database") 
    if c.is_connected(): 
      c.autocommit = True 
     return(c) 
    except: 
     return(None) 
    d = databases().externaldatabase() 
    c = d.cursor() 
    r = c.execute('''select * from tbl_wiki''') 
    print(r) 
> Returns: None 

Soweit ich sagen kann, ist die Verbindung erfolgreich ist, wird die Datenbank aus mehreren Reihen zusammengesetzt aber die Abfrage gibt immer den Nicht-Typ zurück.

Welche Instanzen führt die MySQL-Funktion None zurück?

+1

'c.execute()' gibt nichts zurück, wenn Sie nicht die Option 'multi = True' verwenden. Dann gibt es einen Iterator zurück, mit dem Sie die Ergebnisse jeder Abfrage in den mehreren Abfragen durchlaufen können. – Barmar

+1

Normalerweise rufen Sie Methoden auf dem Cursor auf, um die Ergebnisse aus der Abfrage zu erhalten, z. 'c.fetchone()', um eine Zeile zu erhalten, 'c.fetchall()', um alle Ergebnisse zu erhalten. – Barmar

+0

Siehe die Dokumentation unter http://dev.mysql.com/doc/connector-python/en/connector-python-api-mysqlcursor.html – Barmar

Antwort

8

Abfrageausführungen haben keine Rückgabewerte.

Das Muster, das Sie folgen müssen, ist:

cursor creation; 
cursor, execute query; 
cursor, *fetch rows*; 

Oder in Python:

c = d.cursor() 

c.execute(query) # selected rows stored in cursor memory 

rows = c.fetchall() # get all selected rows, as Barmar mentioned 
for r in rows: 
    print(r) 

Auch einige db Modulen können Sie über den Cursor iterieren mit der für ... in Muster, aber überprüfe das in Bezug auf mysql.

Verwandte Themen