Python django交易
我有一个密码,类似这样的Python django交易,python,django,Python,Django,我有一个密码,类似这样的 def many_objects_saving(list_of_objects): for some_object in list_of_objects: # do smth with an object some_object.save() 正如我所知,django每次在代码中到达save()时都会命中数据库。所以这里有两个问题: 如果我将在另一个函数中使用此函数,并将其包装为transaction.commit\u on\u
def many_objects_saving(list_of_objects):
for some_object in list_of_objects:
# do smth with an object
some_object.save()
正如我所知,django每次在代码中到达save()时都会命中数据库。所以这里有两个问题:
transaction.commit\u on\u success
或transaction.commit\u手动
decorators,django是否会在一个事务中完成所有保存并较少地命中数据库(在一个函数中)def resave_objects(model, condition):
list_of_objects = model.objects.filter(**condition)
many_objects_save(list_of_objects)
@transaction.commit_on_success
def many_objects_save(list_of_objects):
for some_object in list_of_objects:
# do smth with an object
some_object.save()
二,。如果是这样的话,对大型QuerySet来说会更好吗?
谢谢你们 所有保存都将包装到单个事务中,但不在单个查询中。使用事务不会改变您的查询次数 事务不是为了性能,而是为了数据完整性。如果在事务中包装视图并在某个点失败(可能中间的一些数据是错误的,并且无法从错误中恢复),则可能中止事务,并且事务中的任何先前查询都不会对数据库产生任何影响。这样,您就可以确保没有来自失败请求的不完整数据 如果您的问题是大量保存的性能,那么可以使用批量删除/创建方法。这是一个例子。其思想是删除一个查询中的所有对象,然后在一个查询中重新创建所有新值。它不会在所有情况下都起作用,但它可能会起作用