Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 尝试在python中执行以下命令时,收到sqlite3语法错误_Python 3.x_Sqlite - Fatal编程技术网

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是我正在制作的游戏的一个保存,所以在这一点上我毫不在乎。非常感谢。