Python sqlite3无法生成表视图的视图

Python sqlite3无法生成表视图的视图,python,sqlite,Python,Sqlite,通过python,我打开了一个SQLite数据库,并尝试访问一个表的视图。不幸的是,我收到了一条错误消息。下面的Python代码演示了该问题: import sqlite3 conn = sqlite3.connect("test.db") mydb = conn.cursor() mydb.execute("CREATE TABLE TestTbl (MRTarget_id int, Fullmodel text)") mydb.execute("CREATE TABLE TestTbl2

通过python,我打开了一个SQLite数据库,并尝试访问一个表的视图。不幸的是,我收到了一条错误消息。下面的Python代码演示了该问题:

import sqlite3

conn = sqlite3.connect("test.db")
mydb = conn.cursor()

mydb.execute("CREATE TABLE TestTbl (MRTarget_id int, Fullmodel text)")
mydb.execute("CREATE TABLE TestTbl2 (Other_id int, Othermodel text)")

mydb.execute("CREATE VIEW TestView AS SELECT m.ROWID, m.MRTarget_id, m.Fullmodel, t.Othermodel FROM TestTbl m, TestTbl2 t")
mydb.execute("CREATE VIEW TestView2 AS SELECT m.Fullmodel, m.Othermodel FROM TestView m")

mydb.close()

Python在尝试创建TestView2后抛出错误“sqlite3.OperationalError:no-this-column:m.Fullmodel”。但是,从Sqlite3提示符可以毫无问题地执行上述SQL语句。由于我的数据库包含表的视图,我想知道是否完全不可能通过Python以编程方式访问这些视图。

您的代码对我来说很好

您可以尝试在创建第一个视图和第二个视图之间提交:

conn.commit()

我也遇到了同样的问题,我找到了解决办法。我相信您的问题在于,在最初的视图“TestView”中,属性名称实际上是
m.ROWID
m.Fullmodel
等,而不仅仅是
ROWID
Fullmodel

通过sqlite管理器随意查看视图不会显示附加到每个字段名称前面的
m.
。如果运行Pragma查询
Pragma table_info TestView
,则会显示属性扩展

因此,将TestView创建查询更改为

CREATE VIEW TestView AS 
SELECT m.ROWID as ROWID, m.MRTarget_id as MRTarget_id,... etc

您的第二个
Create View
查询应该会成功运行-至少在我的应用程序中是这样的。

也无法重现这个问题,上面的代码对我来说很好。使用此Python复制:Python 2.6.6(r266:84297,2010年8月24日,18:46:32)[MSC v.1500 32位(英特尔)]在win32上。可以在同一平台上使用Python 2.7.1。我尝试在每个mydb.execute语句之后添加conn.commit(),但没有效果。我仍然收到相同的错误消息。我正在使用Python 2.6.5。也许这是个问题?实际上,我刚刚尝试了一个更新的python版本,它似乎运行得很好,所以我最好升级我的python。谢谢,我不这么认为-我正在使用Python2.6.nothing,它在那里工作得很好。