2

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

>>> 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?
4

2 回答 2

7

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

相反,您必须使用动态 SQL 来构造整个 SQL 字符串并将其发送到数据库(如果表名来自您的代码之外,请格外小心以避免注入)。

于 2012-04-05T02:52:06.253 回答
3

您不能在参数化查询中替换元数据。

于 2012-04-05T02:51:57.717 回答