首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在django中用一个查询得到多行?

在django中用一个查询得到多行?
EN

Stack Overflow用户
提问于 2011-06-14 08:46:01
回答 2查看 32.5K关注 0票数 27

如何构建一个从django获取多行的QuerySet?我以为filter()会起作用,但它似乎更糟。

例如,我在汽车模型中有两行,有两个文本属性(license和vin)。现在假设我想打印这些汽车的牌照和车辆识别码。我怎么用一个数据库调用就能做到这一点呢?

这是一个将进行两次数据库调用的答案:

代码语言:javascript
复制
#using get(), two total queries
a = Car.objects.get(id=1) #query here
b = Car.objects.get(id=2) #query here
print(a.license + a.vin) #no query
print(b.license + b.vin) #no query

这显然不起作用,因为我执行了两个get()查询。因此,接下来我将尝试filter():

代码语言:javascript
复制
#using filter(), four total queries
c = Car.objects.filter(id__in=(1,2)) #no query
print(c[0].license + c[0].vin) #two queries
print(c[1].license + c[1].vin) #two queries

嗯,这很奇怪,为什么要调用四个数据库?有没有办法让它把两个数据库调用放在一起?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-06-14 08:49:20

这看起来很奇怪,因为查询集的索引是如何工作的。

代码语言:javascript
复制
c = list(Car.objects.filter(id__in=(1,2))) # query
print(c[0].license + c[0].vin) #no query
print(c[1].license + c[1].vin) #no query

如果您执行以下操作,您也将只有一个查询:

代码语言:javascript
复制
for car in Car.objects.filter(id__in=(1,2)):
    print(car.license + car.vin)

正如@Torsten所说,在你的情况下,你似乎只是想要得到你创造的所有汽车。这可以通过all()方法实现:

代码语言:javascript
复制
for car in Car.objects.all():
    print(car.license + car.vin)
票数 36
EN

Stack Overflow用户

发布于 2011-06-14 09:30:30

很好的例子。我想是你最后一个代码块中的一个打字错误。应该是:

代码语言:javascript
复制
for car in Car.objects.filter(id__in=(1,2)):
    print(car.license + car.vin)

该方法是如何堆叠起来的

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6337973

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档