【问题标题】:Executing raw SQL against SQLite with Django results in `DatabaseError: near "?": syntax error`使用 Django 对 SQLite 执行原始 SQL 会导致 `DatabaseError: near "?": syntax error`
【发布时间】:2012-04-18 19:20:12
【问题描述】:

例如,当我使用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 转换为?

【问题讨论】:

    标签: python django sqlite django-1.3


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-02
        • 2015-04-24
        相关资源
        最近更新 更多