例如,当我使用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
翻译为?
)答案 0 :(得分:6)
您不能在SQL语句中使用参数来代替标识符(列名或表名)。您只能使用它们代替单个值。
相反,您必须使用动态SQL来构造整个SQL字符串,并将其(未参数化)发送到数据库(如果表名在代码之外,则要特别小心以避免注入)。
答案 1 :(得分:3)
您无法在参数化查询中替换元数据。