请使用标题的措词,也许这不是正确的说法,但我无法提出更好的标题。
我有一个名为People的模型,并通过某种方式来识别一群我想通过了解他们的城镇,街道和房屋,然后从数据库中查询来从数据库中获取的人。
class People(models.Model):
town = models.ForeignKey(Town, on_delete=models.CASCADE)
street = models.ForeignKey(Street, on_delete=models.CASCADE)
house = models.ForeignKey(House, on_delete=models.CASCADE)
我可以使用People.objects.get(...)
如下一对一地获取它们,但是当我需要访问许多文件时,由于数据库连接的打开和关闭,这会产生滞后。
result = People.objects.get(town_id=tid, street_id=sid, house_id=hid)
如果我有下面列出的代表tid
sid
和hid
的查询列表,我可以在一个数据库事务中以某种方式完成所有这些操作吗?此列表可以轻松增长到1000个条目或更多。
queries = [
[1, 1, 1]
[1, 1, 2]
[2, 1, 1]
[5, 9, 1]
[13, 40, 2]
]
如果需要查询确切的组合,则需要首先注释查询集以构造三个ID的串联:
from django.db.models.functions import Cast, Concat
from django.db.models import CharField, Value
queries = [",".join(elem) for elem in queries]
People.objects.annotate(address=Concat(
Cast('town_id', output_field=CharField()), Value(','),
Cast('street_id', output_field=CharField()), Value(','),
Cast('house_id', output_field=CharField()
)).filter(address__in=queries)