在 django 中通过一个查询获取多行?

2024-01-03

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

例如,我在模型 Car 中有两行,具有两个文本属性(许可证和 vin)。现在假设我想打印这些汽车的执照和车辆证明。我怎样才能通过一次数据库调用来做到这一点?

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

#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():

#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

嗯,这很奇怪,为什么要进行四个数据库调用?有没有办法让它获得二合一数据库调用?


由于查询集索引的工作原理,这看起来很奇怪。

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

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

for car in Car.objects.filter(id__in=(1,2)):
    print(car.license + car.vin)

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

for car in Car.objects.all():
    print(car.license + car.vin)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 django 中通过一个查询获取多行? 的相关文章

随机推荐