测试代码:
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/