Skip to main content
 首页 » 编程设计

python之使用 Django 对 SQLite 执行原始 SQL 结果为 `DatabaseError: near "": syntax error`

2025年05月04日21java哥

例如,当我使用cursor.execute() as documented :

>>> from django.db import connection 
>>> cur = connection.cursor() 
>>> cur.execute("DROP TABLE %s", ["my_table"]) 
django.db.utils.DatabaseError: near "?": syntax error 

当不使用 Django 的参数替换时,查询按预期工作:

>>> cur.execute("DROP TABLE my_table") 
django.db.utils.DatabaseError: no such table: my_table 

我做错了什么?如何使参数化查询起作用?

注意事项:

  • 在查询后加上; 没有帮助
  • 根据文档,应该使用 %s,而不是 SQLite 的 ?(Django 将 %s 转换为 ?)

请您参考如下方法:

您不能在 SQL 语句中使用参数代替标识符(列名或表名)。您只能使用它们代替单个值。

相反,您必须使用动态 SQL 来构建整个 SQL 字符串,并将其发送到数据库(如果表名来自您的代码之外,请格外小心以避免注入(inject))。