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不需要实例化列表中的所有对象,只返回数据库值。

 

posted @ 2024-03-30 11:59  问道编程  阅读(348)  评论(0编辑  收藏  举报