Django中values()和values_list()
values()
1、不带参数,返回所有属性的键值对,比如使用filter时,会返回一个列表,列表中每一项是一个字典
>>> Blog.objects.values() [{'id': 1, 'name': 'Beatles Blog', 'tagline': 'All the latest Beatles news.'}],
>>> Blog.objects.filter(name__startswith='Beatles').values() [{'id': 1, 'name': 'Beatles Blog', 'tagline': 'All the latest Beatles news.'}]
2、带参数,返回指定的键值对
>>> Entry.objects.values('blog') [{'blog': 1}, ...]
注意:
当values() 与distinct() 一起使用时,注意排序可能影响最终的结果
如果values() 子句位于extra() 调用之后,extra() 中的select 参数定义的字段必须显式包含在values() 调用中。values() 调用后面的extra() 调用将忽略选择的额外的字段
在values() 之后调用only() 和defer() 不太合理,所以将引发一个NotImplementedError
外键:会返回对应的主键
多对多:会将数据集合成本放大,慎用
values_list()
1、不带参数,或者带多个参数,返回元组
>>> Entry.objects.values_list('id', 'headline') [(1, 'First entry'), ...]
2、只带一个参数,并且使用了flat=True参数,返回列表
>>> Entry.objects.values_list('id', flat=True).order_by('id') [1, 2, 3, ...]
最后:差异巨大,values_list速度更快。flat = true使得它更快,因为python不需要实例化列表中的所有对象,只返回数据库值。
问道,问道,道法自然,编程亦然。
作者:问道编程
浏览本文,如有些许收获,请点击推荐。
本站使用「署名 4.0 国际」创作共享协议,码字不易,如需转载或引用,需在文章明显位置注明作者及本文链接。