【问题标题】:Django: Use variable names instead of %sDjango:使用变量名而不是 %s
【发布时间】:2011-05-06 14:37:52
【问题描述】:

我将多个参数传递到原始 sql 语句中,每个参数我使用 %s 是否可以使用变量名而不是多个 %s

例子:

man = "John"
wife = "Jane"
query = "SELECT * FROM person WHERE name = %s and wife = %s"
cursor.execute(query, [man, wife])

【问题讨论】:

  • 如果您使用的是原始 DB API,我真的不明白为什么它与 Django 相关

标签: mysql django django-models


【解决方案1】:

您要查询的是模型吗?

查看解释the raw() manager的文档

raw() automatically maps fields in the query to fields on the model.

这应该很简单:

Person.objects.raw('SELECT id, first_name, last_name, birth_date FROM myapp_person')

【讨论】:

  • 我正在查询的表包含数十万行。为了提高效率,我希望对我的查询更具体。有什么想法吗?
  • 另外我正在使用一些数据库,其中一些不适合 Django 模型,所以我直接查询数据库
【解决方案2】:

DB API 2.0 定义了以下参数样式

  • 'qmark'问号样式, 例如'...WHERE name=?'
  • 'numeric' 数字,位置样式, 例如'...WHERE name=:1'
  • 'named'命名样式, 例如'...WHERE name=:name'
  • 'format' ANSI C printf 格式代码, 例如'...WHERE name=%s'
  • 'pyformat' Python 扩展格式代码, 例如'...WHERE name=%(name)s'

现在,并非所有数据库都实现了所有这些。检查您使用的数据库引擎是否支持pyformat

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-15
    • 2013-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多