2016-04-19 7 views
0

Ich habe Probleme, meine SQLite-Abfrage auf der Grundlage von 2 Eingaben zu meiner Flasche Route ordnungsgemäß ausgeführt werden.SQLite/Flask - "Keine solche Spalte x" - Übergeben von 2 Variablen an Flask Route

In meiner Flask app-Datei, habe ich folgendes:

@app.route('/daily/<int:number>/<weekday>') 
def get_hourly_info(number, weekday): 
    con=get_db() 
    cur=con.cursor() 
    cur.execute("SELECT AVG(value_x), time FROM tableName \ 
      WHERE id = {} AND day = {} GROUP BY time".format(number, weekday)) 
    data=cur.fetchall() 
    return json.dumps(data) 

Meine Datenbank-Datei hat Spalten: Zeit, value_x, id, Tag, value_y, value_z. Ich kann die obige Abfrage perfekt in SQLiteBrowser ausführen, und es gibt die erwarteten Daten zurück. Aber wenn ich versuche es aber via URL zuzugreifen, erhalte ich folgende Fehlermeldung:

sqlite3.OperationalError: no such column: Tuesday 

Wo Dienstag, den Wert in die URL übergeben wird (eg.xxx.xxx:5000/daily/70/Tuesday)

Gibt es hier offensichtliche Fehler? Oder gibt es einen besseren Weg?

Es gibt keinen Fall, wo ich nur eine der Variablen (Nummer und Wochentag) benötigen, sie werden immer zusammen verwendet.
Der Fehler, den es mir gibt, scheint seltsam, wenn die Abfrage in SQLiteBrowser funktioniert.

+1

Verwenden Sie geeignete SQL Bind-Variablen! Verwenden Sie niemals .format() !! – reptilicus

+0

Ja, das sehe ich jetzt. Danke für deinen Beitrag! – Shinkawa91

Antwort

2

Die SQL-Anweisung ist diese:

SELECT AVG(value_x), time FROM tableName 
    WHERE id = 1 AND day = Tuesday 
    GROUP BY time 

Sie erwarten, dass die Tuesday eine Zeichenfolge sein, aber Sie keine Anführungszeichen dort haben.

Um ehrlich zu sein, ist dies der falsche Weg, um die SQL-Anweisung zu formatieren. Die .execute() Methode macht es für Sie.

Es ist bis sqlite3 escape und Formatierung der SQL vor der Ausführung. Auf diese Weise vermeiden Sie Probleme wie SQL-Injektion.

Die sqlite3 docs erklären dies mit mehr Details.

+0

Das war in der Tat das Problem! Ich habe nicht viel SQL gemacht, aber dieses Format scheint vertraut und viel einfacher. Vielen Dank für die Hilfe – Shinkawa91

Verwandte Themen