sqlite3.OperationalError:在“?”附近:遍历编译指示table_info时的语法错误

时间:2018-11-12 08:20:18

标签: python sqlite

在开始对其执行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

我做错了什么?

2 个答案:

答案 0 :(得分:0)

?变量只能用于值,不能用于表名等标识符。

使用字符串格式来生成带有表名的SQL字符串。

答案 1 :(得分:0)

尝试一下:

for t in tables:
   c.execute("pragma table_info({})".format(t)).fetchall()