无法创建视图的视图
我在用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: 没有这个列: m.Fullmodel
上面的SQL语句在SQLite命令行中运行得很好。这个数据库里有视图的视图;是不是说用Python访问这些视图是不可能的呢?
2 个回答
0
你的代码在我这儿运行得很好。
你可以试着在创建第一个视图和第二个视图之间进行一次提交:
conn.commit()
1
我也遇到过同样的问题,后来找到了解决办法。我觉得你的问题在于,在你最开始的视图'TestView'中,属性名称其实是 m.ROWID
、m.Fullmodel
这些,而不是单纯的 ROWID
、Fullmodel
。
如果你随便用sqlite管理工具查看这些视图,是看不到每个字段名前面加的 m.
的。如果你运行这个命令 PRAGMA table_info TestView
,就能看到这些属性的完整名称。
所以,把你创建TestView的查询语句改成
CREATE VIEW TestView AS
SELECT m.ROWID as ROWID, m.MRTarget_id as MRTarget_id,... etc
这样你的第二个 Create View
查询就应该能成功运行了——至少在我的应用中是这样。