我正在尝试创建一个函数来删除当前数据库中的所有表。 这就是我所拥有的:
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”语句,但无论如何我都会收到错误)
谢谢
答案 0 :(得分:1)
您不能使用参数指定任何SQL关键字或数据库实体名称。您只能使用它们代替列值。您需要将DROP TABLE
命令构造为SQL字符串,并将未参数化的字符串作为SQL命令传递。如果表名源自您的应用程序之外,请务必对其进行清理!