例如,当我使用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))。
关于python - 使用 Django 对 SQLite 执行原始 SQL 结果为 `DatabaseError: near "?": syntax error`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10022040/