使用Django对SQLite执行原始SQL会导致“DatabaseError:near”?“:syntax error`

时间:2012-04-05 02:49:44

标签: 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翻译为?

2 个答案:

答案 0 :(得分:6)

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

相反,您必须使用动态SQL来构造整个SQL字符串,并将其(未参数化)发送到数据库(如果表名在代码之外,则要特别小心以避免注入)。

答案 1 :(得分:3)

您无法在参数化查询中替换元数据。