2017-03-01 138 views
-1

這個簡單的問題讓我難堪,雖然我期望它的一個簡單的修復,但我一直無法找到必要的改變。SQLite - 錯誤「sqlite3.OperationalError:near」,「:語法錯誤」

我想要完成的是構建一個簡單的數據庫表,其中包含來自weatherundergroud的昨天降水。我能夠解析必要的json數據,但是當我嘗試向數據庫條目添加時間戳記時,我無法填充數據庫。我可以將這個語法與一個變量一起使用,但是相關的數據庫變化除了時間戳之外並不包含2個變量。下面是代碼的簡化版本:

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

它失敗,此錯誤: curs.execute( 「INSERT INTO雨值(日期時間( '現在'),(?))?」,(日,雨,)) sqlite3.OperationalError:近 「」:語法錯誤

+2

'INSERT INTO雨值(?DATETIME( '現在'),)「'更有意義,我 – Evert

+0

感謝!解決了它,但我不知道爲什麼額外支架分組會導致錯誤 – Jake

+1

我假設圓括號將它們中的兩個條目分組到一個條目中,因此您只將兩個條目插入表中,第二個是複合材料。 – Evert

回答

1

有太多的括號中的SQL語句:

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

(?,?)將有兩個山坳行值umns,這在這裏沒有意義。

values子句expectes三個表達式,所以只要給它正是:

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