django - django 查询中的惰性求值如何工作?
问题描述
我对 django-querysets 中的惰性评估有疑问。
这是我的 Django 查询:
方法1:
tyres_in_car = Car.objects.filter(serial_no__startswith('AB')).values('tyre__type')
.values()
在此查询中,在这种情况下,我使用 (tyre type)访问外键值。
我使用的另一种方法是:
方法2:
第 1 行:tyres = Car.objects.filter(serial_no__startswith('AB'))
第 2 行:all_tyres = tyres.tyre.all()
第 3 行:tyres_in_car = [ ty.type for ty in all_tyres ]
因为,我.values()
在这两种方法中都使用了,所以在这两种情况下查询是否只命中数据库一次(因为在方法 2 的情况下是惰性评估),或者在方法 2 的情况下它会命中两次。
从代码可读性的角度来看,我认为方法 2 看起来更合适。
解决方案
比两者更好的方法是首先查询轮胎。
Tyre.objects.filter(car__serial_no__startswith='AB').values('type')
推荐阅读
- swift - Swift 4 - 用数组过滤数组
- javascript - 异步等待承诺上的 UnhandledPromiseRejectionWarning
- c++ - 添加新代码以查找公约数时,Printf 命令不打印。
- wordpress - 我可以将 WordPress 文件夹直接解压缩到 htdocs 文件夹中吗?
- angular - Angular 6, rxjs 6 fork加入地图
- node.js - 是否可以在 nodejs 中的“newListener”事件的事件侦听器回调中发出事件?
- r - R blogdown:如何从博客中链接到另一个博客
- jquery - Bootstrap 4 上的静态背景不起作用
- permissions - 谷歌云存储访问问题
- javascript - Javascript 上下文私有变量