我试图在python中执行以下命令时得到sqlite3语法错误

时间:2014-05-14 01:05:58

标签: python-3.x sqlite

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

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”语句,但无论如何我都会收到错误)

谢谢

1 个答案:

答案 0 :(得分:1)

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