2017-03-01 4 views
-1

ce problème simple m'a étonné et alors que je m'attends à ce que ce soit une solution facile, je n'ai pas été en mesure de trouver le changement nécessaire. Ce que j'essaye d'accomplir est de construire une table DB simple qui contient la précipitation d'hier de weatherundergroud. Je suis capable d'analyser les données json nécessaires mais lorsque je tente d'ajouter un horodatage à l'entrée DB, je ne parviens pas à remplir la base de données. Je suis en mesure d'utiliser cette syntaxe avec une seule variable et la modification de base de données pertinente, mais pas avec 2 variables en plus de l'horodatage. Voici une version simplifiée du code:SQLite - erreur "sqlite3.OperationalError: near", ": erreur de syntaxe"

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() 

qui échoue avec cette erreur: curs.execute ("INSERT INTO valeurs Precip (datetime ('maintenant'), (?,))?", (Date , precip,)) sqlite3.OperationalError: près "": erreur de syntaxe

+2

'INSERT INTO valeurs Precip (? Datetime ('maintenant'),,)" 'a plus de sens pour moi – Evert

+0

Merci, je l'ai résolu bien que je ne sache pas pourquoi le groupe de parenthèses supplémentaire provoque l'erreur – Jake

+1

Je suppose que les parenthèses regroupent les deux entrées à l'intérieur d'une seule entrée, donc vous n'insérez que deux entrées dans la table, le second étant un composite. – Evert

Répondre

1

Il y a trop de parenthèses dans l'instruction SQL:

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

(?,?) serait une valeur de ligne avec deux col umns, ce qui n'a pas de sens ici.

La clause VALUES expectes trois expressions, donc juste donner exactement cela.

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