无法创建视图的视图

3

我尝试使用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()

尝试创建 TestView2 时,出现错误:

sqlite3.OperationalError: no such column: m.Fullmodel

在 SQLite 提示符下,上述 SQL 语句可以正常工作。数据库包含视图的视图;难道不能使用 Python 访问这些视图吗?

1
我也无法重现这个问题,上述代码在我的电脑上运行良好。 - Theo Spears
1
使用此Python版本进行复制:Python 2.6.6(r266:84297,2010年8月24日,18:46:32)[MSC v.1500 32位(Intel)]在win32平台上。同一平台上的Python 2.7.1也可以正常运行。 - John Machin
2个回答

1
我曾经遇到过同样的问题,但我找到了解决方法。我认为你的问题在于,在你的初始视图“TestView”中,属性名称实际上是m.ROWIDm.Fullmodel等,而不仅仅是ROWIDFullmodel等。
通过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查询应该能够成功运行 - 至少在我的应用程序中是这样的。


0

你的代码在我这里运行良好。

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

conn.commit()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接