django F表达式生成的SQL查询

Posted

技术标签:

【中文标题】django F表达式生成的SQL查询【英文标题】:SQL query generated by django F expression 【发布时间】:2019-05-03 02:24:23 【问题描述】:

有人知道django在使用F表达式时生成的实际查询吗?

对于文档中提到的示例,生成的查询将是什么:https://docs.djangoproject.com/en/2.1/ref/models/expressions/#f-expressions

from django.db.models import F

reporter = Reporters.objects.get(name='Tintin')
reporter.stories_filed = F('stories_filed') + 1
reporter.save()

我尝试查看使用以下命令生成的查询:

from django.db import connection
logging.info('[----- DEBUG -----] Query -1: %s', connection.queries[-1])
logging.info('[----- DEBUG -----] Query -2: %s', connection.queries[-2])
logging.info('[----- DEBUG -----] Query -3: %s', connection.queries[-3])

但我没有在我的模型/表格上看到任何查询。

有人知道怎么解决吗?

【问题讨论】:

【参考方案1】:

查询应该在connection.queries 中 - 我刚刚测试发现它在那里。对于 mysql 和 Postgresql,发送到数据库的查询看起来像这样:

UPDATE "myapp_reporters" 
SET "stories_filed" = ("myapp_reporters"."stories_filed" + 1) 
WHERE "myapp_reporters"."id" = 123

【讨论】:

以上是关于django F表达式生成的SQL查询的主要内容,如果未能解决你的问题,请参考以下文章