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

Dav*_*ver 1 python sqlite django django-1.3

例如,当我cursor.execute() 按照记录使用时:

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

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

>>> cur.execute("DROP TABLE my_table")
django.db.utils.DatabaseError: no such table: my_table
Run Code Online (Sandbox Code Playgroud)

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

笔记:

  • 使用查询后缀;并没有帮助
  • 根据文档,%s应该使用,而不是SQLite ?(Django转换%s?)

Lar*_*tig 6

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

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