我有一个python对象列表。
假设py_objs_list = [...data...]
型号为Card
我只想在django数据库中创建一个新对象,如果数据库已经没有对象的话
我的解决方案是在Card
上执行objects.all()
,在py_objs_list
上运行for循环,检查py_obj
是否在objects.all()
中。如果不存在,我会将py_obj
放到单独的列表中。最后使用bulk_create
创建对象
py_objs_list = [...data...]
cards = list(Card.objects.al()) <--- i know db hits here --->
emails = [card.email for card in cards] <--- does db hit here also everytime in a loop --->
empty_list = []
for py_obj in py_objs_list:
if py_obj[some_data] not in emails:
empty_list.append(py_obj)
---bulk_create---
这是解决这个问题的最好方法吗?如果不是,请告诉我(想要最好的)。thnks:)
现在我的疑问是db是否如上所述每次都在列表理解中命中
my solution for this problem
2条答案
按热度按时间qyswt5oh1#
您可以使用
bulk_create
并设置ignore_conflicts=True
https://docs.djangoproject.com/en/4.1/ref/models/querysets/#bulk-create
这将忽略对象列表中的任何记录,因为这些记录已经存在而无法创建。
yfjy0ee72#
我认为使用get_or_create()更适合您的场景。
只需在原始列表上运行一个循环,并根据需要使用任意多个字段,以确保找到唯一的示例,如下所示