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

标签 python django sqlite django-1.3

例如,当我使用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/

相关文章:

java - 在 Android SQLite 中处理 "complex"数据库

python - 如何定向 matplotlib ax 对象以沿时间序列线(affine_transform、mtransform)连续绘制?

python - Django form_valid 不工作

sqlite 选择 where...and vs. case...when

python - 调试 Django 应用程序安装

python - Django 十进制字段无法存储应该没问题的 float

sqlite - Weka机器学习:ARFF文件:多重关系

python - 尝试使用 Python 连接到 mysql 时出现 2013 丢失连接错误

python - 在 python Flask 服务器中使用 oauth Post 方法的 Google 登录 API

naming-conventions - 命名派生类的 Pythonic 方式