2016-08-23 66 views
0
創建SQLite視圖

我創建了一個數據庫,我能夠使用下面的命令來創建一個簡單的觀點:不能使用列名列表在Python

CREATE VIEW IF NOT EXISTS monthly_terminals (year, month) AS 
    SELECT reportYear, reportMonth FROM osMonthlyTerminals 

此命令的工作就好了,如果我粘貼成在Firefox上的SQLite Manager插件:

enter image description here

然後我放棄這一觀點,並嘗試使用完全相同的命令,在下面的Python 3代碼來創建這個觀點......

import sqlite3 
db_name = "../data/OsReportMerchants.sqlite" 
conn = sqlite3.connect(db_name) 
cur = conn.cursor() 
cur.execute("CREATE VIEW IF NOT EXISTS monthly_terminals (year, month) AS SELECT reportYear, reportMonth FROM osMonthlyTerminals") 

...但我得到以下錯誤:

sqlite3.OperationalError: near "(": syntax error 

更具體地說,它看起來像這樣在IPython中:

enter image description here

是的,我知道我應該被參數化這我曾試圖這樣做,但仍繼續陷入同樣的​​困境。

我看這個:https://www.sqlite.org/lang_createview.html它說列名單在3.9及更高版本中被支持,所以我更新到版本3.13的sqlite3,並且仍然遇到這個問題。

當我刪除列的列表,並使用此:

import sqlite3 
db_name = "../data/OsReportMerchants.sqlite" 
conn = sqlite3.connect(db_name) 
cur = conn.cursor() 
cur.execute("CREATE VIEW IF NOT EXISTS monthly_terminals AS SELECT reportYear, reportMonth FROM osMonthlyTerminals") 

它工作正常。不知道爲什麼它在一種情況下,而不是在另一種情況下。

回答

1

Python擁有自己的SQLite庫副本(請參閱sqlite3.sqlite_version)。

如果最新的Python版本沒有最新版本的SQLite,更新它的唯一方法是重新編譯Python,或者使用一些其他數據庫驅動程序,如APSW

+0

當我做conda列表時,它顯示sqlite 3.13.0。當我從python shell執行sqlite3.version(在導入sqlite3之後)時,它說2.6.0。這似乎讓我感到困惑(也許是因爲我對Python比較陌生)。所以看起來FireFox插件使用的是更新版本,我的Python代碼使用的是舊版本。這是怎麼回事? –

+0

看到我答案的第一句話。 –