【问题标题】:Im getting sqlite3 syntax error when trying to execute the following command in python [duplicate]尝试在python中执行以下命令时出现sqlite3语法错误[重复]
【发布时间】:2023-03-06 05:49:01
【问题描述】:

我正在尝试创建一个函数来删除当前数据库中的所有表。 这就是我所拥有的:

def drop_tables (self):
    cur.execute ("SELECT name FROM sqlite_master WHERE type='table';")
    tlist = cur.fetchall()
    with conn:
        for t in tlist:
            cur.execute ('DROP TABLE ?;', t[0])

这会产生以下错误:

File "/storage/sdcard0/com.hipipal.qpyplus/.last_tmp.py", line 170, in drop_tables
cur.execute ('DROP TABLE ?;', t[0])
sqlite3.OperationalError: near "?": syntax error

这是一个 sqlite3 错误,而不是 python 错误。我不能像这样使用光标替代品吗?有没有其他方法可以实现这一点?其他然后删除数据库? (而且我不知道 DROP 是否需要“with”语句,但无论如何我都会收到错误消息)

谢谢

【问题讨论】:

    标签: python-3.x sqlite


    【解决方案1】:

    您不能使用参数来指定任何 SQL 关键字或数据库实体名称。您只能使用它们代替列值。您需要将 DROP TABLE 命令构造为 SQL 字符串,并将未参数化的字符串作为 SQL 命令传递。如果表名来自您的应用程序之外,请确保对其进行清理!

    【讨论】:

    • 我什至没有想到将其预格式化为字符串-_-。你可以说我太累了。它不会是恶意的,因为我要插入的是表的名称,因此任何注入的命令都必须采用创建的表名的形式。另外,即使这是可能的,数据库也是我正在制作的游戏的保存,所以我现在不在乎。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2013-10-17
    • 1970-01-01
    • 2013-06-12
    • 1970-01-01
    • 1970-01-01
    • 2022-01-16
    • 2019-08-22
    • 1970-01-01
    相关资源
    最近更新 更多