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查询的主要内容,如果未能解决你的问题,请参考以下文章

F# 查询表达式是不是具有与本机 SQL 相同的性能?

Django 的 F() 表达式奇怪行为

日期时间对象上的 Django F 表达式

Django F() 表达式在函数参数中不起作用

Access 2007 中的 SQL 查询有效,但在报表中的表达式生成器中无效(结果为 #name?)

SQL中的正则表达式提取函数实现?