我已经创建了一个数据库,并且可以使用以下命令创建一个简单的视图:
CREATE VIEW IF NOT EXISTS monthly_terminals (year, month) AS
SELECT reportYear, reportMonth FROM osMonthlyTerminals
如果我粘贴到FireFox上的SQLite Manager插件中,这个命令就可以了。
然后我删除此视图并尝试在以下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中看起来像这样:
是的,我知道我应该对此进行参数设置,并且我已经尝试过这样做,但仍然遇到同样的问题。
我看一下:https://www.sqlite.org/lang_createview.html并且它说3.9及更高版本支持列列表,所以我更新到sqlite3的3.13版本并且仍然遇到了这个问题。
当我删除列列表并使用它时:
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")
它工作正常。不确定为什么它在一个上下文中工作而不在另一个上下文中。
答案 0 :(得分:1)
Python有自己的SQLite库副本(参见sqlite3.sqlite_version
)。
如果最新的Python版本没有最新的SQLite版本,更新它的唯一方法是重新编译Python,或使用其他数据库驱动程序,如APSW。