无法使用列名列表在Python中创建SQLite View

时间:2016-08-23 02:52:20

标签: python sqlite anaconda

我已经创建了一个数据库,并且可以使用以下命令创建一个简单的视图:

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及更高版本支持列列表,所以我更新到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")

它工作正常。不确定为什么它在一个上下文中工作而不在另一个上下文中。

1 个答案:

答案 0 :(得分:1)

Python有自己的SQLite库副本(参见sqlite3.sqlite_version)。

如果最新的Python版本没有最新的SQLite版本,更新它的唯一方法是重新编译Python,或使用其他数据库驱动程序,如APSW