在开始对其执行CRUD操作之前,我想验证用户输入的数据库的表和视图是否已正确配置。
如果我对每个表名进行硬编码,我就可以使用此方法,但是我想动态收集所有表和视图上的信息,以提高效率,并知道是否还有比我期望的更多的信息。
import sqlite3
conn = sqlite3.connect("test.db")
tables = c.execute("""SELECT name
FROM sqlite_master
WHERE type='view'
OR type='table'
ORDER BY name;""").fetchall()
for t in tables:
c.execute("pragma table_info(?)",t).fetchall()
“表”的输出如下所示:
[('table1',), ('table2',), ('v_view1',)]
当我运行上面的代码时,它返回下面的错误。
sqlite3.OperationalError: near "?": syntax error
我做错了什么?
答案 0 :(得分:0)
?
变量只能用于值,不能用于表名等标识符。
使用字符串格式来生成带有表名的SQL字符串。
答案 1 :(得分:0)
尝试一下:
for t in tables:
c.execute("pragma table_info({})".format(t)).fetchall()