mysql - django,一个orm命令执行重复的sql语句

标签 mysql django orm

测试代码:

1、  b = 1
2、  aa = Forum.objects.values('id')
3、  d = 2
4、  print aa[0]['id']

然后我用linux命令监控mysql执行:

tail -f /var/log/mysql/mysql.log

然后我逐行调试代码, 第 2 行,监视器屏幕打印

25 Query    SELECT `forum`.`id` FROM `forum` ORDER BY `forum`.`display_order` ASC LIMIT 21
25 Query    SELECT `forum`.`id` FROM `forum` ORDER BY `forum`.`display_order` ASC LIMIT 21

第 3 行,监视器屏幕打印

25 Query    SELECT `forum`.`id` FROM `forum` ORDER BY `forum`.`display_order` ASC LIMIT 21
25 Query    SELECT `forum`.`id` FROM `forum` ORDER BY `forum`.`display_order` ASC LIMIT 21

第 4 行,监视器屏幕打印

25 Query    SELECT `forum`.`id` FROM `forum` ORDER BY `forum`.`display_order` ASC LIMIT 21
25 Query    SELECT `forum`.`id` FROM `forum` ORDER BY `forum`.`display_order` ASC LIMIT 21

为什么一个orm语句在mysql日志中执行了这么多次

最佳答案

查询集是惰性的。查询的评估方式为:

  • 迭代
  • 切片
  • 酸洗/缓存
  • repr()
  • len()
  • list()
  • bool()

来源:Django documentation: Queryset API reference .

因此,语句 3 和 4 不会以任何方式处理查询集,因此至少在理论上不可能触发任何查询,这表明您的日志有问题。

django-toolbar是一个不错的应用程序,除其他外,它可以向您显示执行的查询并可以帮助您。

关于mysql - django,一个orm命令执行重复的sql语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30452897/

相关文章:

python - 使用Python将csv加载到mysql中语法错误

python - Django rest 框架表示展平嵌套对象

java - OpenJPA:从数据库自动构建实体的代码

grails - 在Grails和ElasticSearch中解码属性失败

MySQL 总和更新

php - "Order by price"在 MySQL 中返回一个奇怪的顺序

javascript - 通过javascript更新Django数据库

java - JPA 和 Spring Data JPA 有什么区别?

php - 在 php.net 上找到的数据库适配器

mysql - docker 在 alpine linux 中构建 python django 应用程序时出错