Python 3.x 尝试在python中执行以下命令时,收到sqlite3语法错误
我正在尝试创建一个函数来删除当前数据库中的所有表。 这就是我所拥有的:Python 3.x 尝试在python中执行以下命令时,收到sqlite3语法错误,python-3.x,sqlite,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]) 这将产生
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”语句,但无论如何我都会得到错误)
谢谢您不能使用参数指定任何SQL关键字或数据库实体名称。只能使用它们代替列值。您需要将
DROP TABLE
命令构造为SQL字符串,并将未参数化的字符串作为SQL命令传递。如果表名来源于应用程序之外,请确保对其进行清理 我甚至没想过把它做成一根绳子。你可以看出我太累了。它不可能是恶意的,因为我试图插入的是一个表的名称,所以任何注入的命令都必须是以创建的表名的形式。另外,即使这是可能的,db是我正在制作的游戏的一个保存,所以在这一点上我毫不在乎。非常感谢。