2016-04-24 15 views
0

Ich lerne Python und treffe einen Roadblock, der an einer Webanwendung arbeitet. Ich versuche, Daten von einer lokalen Datenbank (Mariadb) zu holen, und wenn ich versuche, die Ergebnisse auszudrucken, sehe ich nur ().Python cursor.fetchall() gibt ein leeres Tupel zurück

Diese Funktion ruft Daten aus der DB:

def getHikeInfo(name): 

    conn, cursor = getConnectionAndCursor() 

    cursor.execute("SELECT * FROM hiking WHERE name = %s", [name]) 

    # fetch the results 
    data = cursor.fetchall() 

    # clean up 
    cursor.close() 
    conn.close() 

    return data 

Dieser Code ruft die Funktion:

if 'name' in form: 
    #unpack into python variable 
    name=form['name'].value 
    print name #debug purpose to check name is proper 
    data = getHikeInfo(name) 
    print data #prints '()' 

else: 
    data = getAllHikes() 
    showAllHikes(data) 

Ich habe ein paar Dinge versucht, aus Veränderung der Art, wie ich verketten der Name für die Übergabe des Namens als Parameter und nichts scheint zu funktionieren. Der Name ist zu 100% definitiv in der Tabelle enthalten. Ich kann nicht sehen, was das Problem sein könnte.

Jede Hilfe wird geschätzt.

+0

Ich bin nicht vertraut mit Mariadb, aber hat es eine Befehlszeilenschnittstelle, wo Sie die SQL-Abfrage ausführen können, nur um sicherzustellen, dass es Ergebnisse zurückgibt? Auf diese Weise können Sie bestätigen, dass es ein Problem mit dem Code ist. Sie können das Programm auch die Anweisung, die es sendet, drucken lassen, damit Sie überprüfen können, ob es korrekt aus der Variablen zusammengesetzt ist. –

+0

@SamIreland Ich führte die Abfrage auf mariadb Schnittstelle und es gibt das erwartete Ergebnis aus. Das Problem scheint mit dem Python-Code zu sein. Danke für den Vorschlag –

+0

@ishyfishy, ​​braucht meine Post eine zusätzliche Klärung, um die Antwort auf Ihre Frage zu begründen? Bitte lassen Sie es mich wissen, damit ich Änderungen vornehmen kann. Vielen Dank! – Abdou

Antwort

0

Wenn das name Argument für Ihre getHikeInfo Funktion ist eine Zeichenfolge, schreiben Sie Ihre cur.execute Aufruf wie folgt:

cursor.execute("SELECT * FROM hiking WHERE name = '%s'"% name) 

Aber wenn Sie in einer Liste Ihrer getHikeInfo Funktion übergeben, dann können Sie zu tun haben, :

cursor.execute("SELECT * FROM hiking WHERE name IN {}".format(tuple(name))) 

so müssten Sie Ihre getHikeInfo Funktion wie folgt umschreiben:

def getHikeInfo(name): 

    conn, cursor = getConnectionAndCursor() 
    cursor.execute("SELECT * FROM hiking WHERE name = %s"%name) 
    #if you're passing in a list for `name` then you would need to use my second suggestion. 

    # fetch the results 
    data = cursor.fetchall() 

    # clean up 
    cursor.close() 
    conn.close() 

    return data 

Solange Ihre Tabelle Daten enthält, die die durch das Argument name definierte Bedingung erfüllen, sollten Sie einige Ergebnisse sehen können.

Ich hoffe, es hilft.

Verwandte Themen