无法创建视图的视图

3 投票
2 回答
3851 浏览
提问于 2025-04-17 07:44

我在用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.ROWIDm.Fullmodel 这些,而不是单纯的 ROWIDFullmodel

如果你随便用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 查询就应该能成功运行了——至少在我的应用中是这样。

撰写回答