确保所有基于字段的列表项有效地存在于 table 中
Make sure all list items based on fields exists in table efficiently
我有这样一个模型:
class MyModel(models.Mode):
foo = models.CharField(...)
bar = models.CharField(...)
我有一个包含 foo 和 bar 字段值的列表。我想检查此列表中的所有项目,是否存在于数据库中。
例如:
my_list = [{'foo': 'foo_1','bar': 'bar_1'}, {'foo': 'foo_2','bar': 'bar_2'}]
我想检查数据库中列表项字段对应的所有记录是否存在值。我可以更改我的列表结构。
我可以用 for 循环来做,但我想找到更有效的方法。单个查询可能吗?有什么建议吗?
您可以尝试检查 SQL 响应中的实例数:
from django.db.models import Q
my_list = [{'foo': 'foo_1','bar': 'bar_1'}, {'foo': 'foo_2','bar': 'bar_2'}]
query = Q()
for i in my_list:
query &= Q(foo=i['foo'], bar=i['bar'])
queryset = MyModel.objects.filter(query)
assert queryset.count() == len(my_list) # 2 == 2
因此,如果您的数据库中有所有值,则 count 和 len 值将相同。
如果您的 my_list 仅包含适当的字段,您可以这样做:
for i in my_list:
query &= Q(**i)
我有这样一个模型:
class MyModel(models.Mode):
foo = models.CharField(...)
bar = models.CharField(...)
我有一个包含 foo 和 bar 字段值的列表。我想检查此列表中的所有项目,是否存在于数据库中。 例如:
my_list = [{'foo': 'foo_1','bar': 'bar_1'}, {'foo': 'foo_2','bar': 'bar_2'}]
我想检查数据库中列表项字段对应的所有记录是否存在值。我可以更改我的列表结构。
我可以用 for 循环来做,但我想找到更有效的方法。单个查询可能吗?有什么建议吗?
您可以尝试检查 SQL 响应中的实例数:
from django.db.models import Q
my_list = [{'foo': 'foo_1','bar': 'bar_1'}, {'foo': 'foo_2','bar': 'bar_2'}]
query = Q()
for i in my_list:
query &= Q(foo=i['foo'], bar=i['bar'])
queryset = MyModel.objects.filter(query)
assert queryset.count() == len(my_list) # 2 == 2
因此,如果您的数据库中有所有值,则 count 和 len 值将相同。
如果您的 my_list 仅包含适当的字段,您可以这样做:
for i in my_list:
query &= Q(**i)