2017-03-01 4 views
-1

Dieses einfache Problem hat mich ratlos und während ich erwarte, dass es eine einfache Lösung Ich habe nicht in der Lage, die notwendige Änderung zu finden.SQLite - Fehler "sqlite3.OperationalError: near", ": Syntaxfehler"

Was ich versuche zu erreichen, ist eine einfache DB-Tabelle zu erstellen, die gestern Niederschläge aus dem Wetterbereich enthält. Ich bin in der Lage, die notwendigen JSON-Daten zu parsen, aber wenn ich versuche, dem DB-Eintrag einen Zeitstempel hinzuzufügen, kann ich die Datenbank nicht füllen. Ich kann diese Syntax aber mit einer Variablen und relevanten DB ändern, jedoch nicht mit 2 Variablen zusätzlich zum Zeitstempel. Hier ist eine vereinfachte Version des Codes:

conn = sqlite3.connect('precip.sqlite3') 
curs = conn.cursor() 

curs.execute(''' 
CREATE TABLE IF NOT EXISTS Precip 
(timestamp DATETIME, date TEXT, precip TEXT)''') 

date = js["history"]["date"]["pretty"] 
precip = js["history"]["dailysummary"][0]["precipm"] 

print "date:", date, "precipitation", precip, "mm" 

curs.execute("INSERT INTO Precip values(datetime('now'),(?, ?))",(date, precip,)) 
conn.commit() 

, die mit diesem Fehler fehlschlägt: curs.execute ("INSERT INTO Niederschlagswerte (Datumzeit ('jetzt'), (?,))?", (Datum , Niederschlag,)) sqlite3.OperationalError: in der Nähe "": Syntaxfehler

+2

'IN Niederschlagswerte INSERT (? Datetime ('jetzt'),,)" 'mehr Sinn für mich macht – Evert

+0

Danke, das hat es gelöst, obwohl ich mir nicht sicher bin, warum die zusätzliche Klammergruppierung den Fehler verursacht. – Jake

+1

Ich würde annehmen, dass die Klammern die beiden Einträge in ihnen zu einem einzigen Eintrag zusammenfassen, daher fügen Sie nur zwei Einträge in die Tabelle ein. der zweite ist ein zusammengesetzter. – Evert

Antwort

1

Es gibt zu viele Klammern in der SQL-Anweisung:

INSERT INTO Precip values(datetime('now'),(?, ?)) 

(?,?) wäre ein Zeilenwert mit zwei col sein umns, was hier keinen Sinn ergibt.

Die VALUES-Klausel expectes drei Ausdrücke, so geben sie nur genau das:.

INSERT INTO Precip VALUES (datetime('now'), ?, ?) 
Verwandte Themen