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不需要实例化列表中的所有对象,只返回数据库值。
标签:Beatles,list,Django,objects,values,参数,id From: https://www.cnblogs.com/wendaobiancheng/p/18105318