我试图修改一些模型(如< code>User模型)许多实例,这些更改是不同的(我不想使用update QuerySet
方法,这对于我的场景不起作用)。
例如,一些用户需要更改first_name
,一些用户需要更改last_name
并获得如下用户:all_user=User.objects.all()
我认为如果我在更改后对每个实例使用保存方法,Django会发送一个保存查询!
如何将对数据库的所有更改保存在一个查询中,而不是在模型上使用 foreach 并逐个保存?
鉴于@iklinac的评论,我完全建议实施django自己的批量更新方法
这与我下面的原始答案非常相似,但看起来功能现在是内置的。
# bulk_update(objs, fields, batch_size=None)
>>> objs = [
... Entry.objects.create(headline='Entry 1'),
... Entry.objects.create(headline='Entry 2'),
... ]
>>> objs[0].headline = 'This is entry 1'
>>> objs[1].headline = 'This is entry 2'
>>> Entry.objects.bulk_update(objs, ['headline'])
原答案
有一个叫做django-bulk-update的包,类似于内置在django中的批量创建。
我使用它的一个例子是管理类中操作的一部分;
@admin.register(Token)
class TokenAdmin(admin.ModelAdmin):
list_display = (
'id',
'type'
)
actions = (
'set_type_charity',
)
def set_type_charity(self, request, queryset):
for token in queryset:
token.type = Token.Type.CHARITY
bulk_update(
queryset,
update_fields=['type', 'modified'],
batch_size=1000
)
用法,取自其自述文件;
与经理:
import random
from django_bulk_update.manager import BulkUpdateManager
from tests.models import Person
class Person(models.Model):
...
objects = BulkUpdateManager()
random_names = ['Walter', 'The Dude', 'Donny', 'Jesus']
people = Person.objects.all()
for person in people:
person.name = random.choice(random_names)
Person.objects.bulk_update(people, update_fields=['name']) # updates only name column
Person.objects.bulk_update(people, exclude_fields=['username']) # updates all columns except username
Person.objects.bulk_update(people) # updates all columns
Person.objects.bulk_update(people, batch_size=50000) # updates all columns by 50000 sized chunks
与帮手:
import random
from django_bulk_update.helper import bulk_update
from tests.models import Person
random_names = ['Walter', 'The Dude', 'Donny', 'Jesus']
people = Person.objects.all()
for person in people:
person.name = random.choice(random_names)
bulk_update(people, update_fields=['name']) # updates only name column
bulk_update(people, exclude_fields=['username']) # updates all columns except username
bulk_update(people, using='someotherdb') # updates all columns using the given db
bulk_update(people) # updates all columns using the default db
bulk_update(people, batch_size=50000) # updates all columns by 50000 sized chunks using the default db
我已将以下代码放在脚本文件的顶部 现在我可以导入我的django应用程序并运行小片段(主要是测试东西) 我想导入通过 我知道https://github.com/django-extensions/django-extensions运行它会自动导入所有型号和更多型号。 我在看他们的代码。不确定我是否能理解。 https://github.com/django-extensions/django-e
问题内容: 我需要在Django模型中存储一些数据。这些数据并不等于模型的所有实例。 最初,我考虑过将模型子类化,但是我试图保持应用程序的灵活性。如果使用子类,则每次需要新的对象时都需要创建一个整个类,这是不好的。我还将最终得到很多子类,仅用于存储一对额外的字段。 我真的觉得词典是最好的方法,但是Django文档中没有关于在Django模型中存储词典的内容(或者我找不到它)。 有什么线索吗? 问题
问题内容: 在保存模型之前,我需要重新调整图片大小。但是,如何检查是否添加了新图片或仅更新了说明,以便每次保存模型时都可以跳过重新缩放? 我只想在加载新图像或更新图像时重新缩放,而在更新说明时不想要。 问题答案: 一些想法: 不确定是否可以在所有伪自动django工具中正常运行(例如:ModelForm,contrib.admin等)。
问题内容: 有没有一种方法可以查询数据库以找出所有表中有多少行? IE 希望你能指教 问题答案:
问题是: 使用这样指定的keras模型(部分): 是否可以在模型中保存所有详细信息以供以后使用? 详情如下: 我一直在遵循machinelearningmastery.com的一个例子,试图修改和添加模型的特征/参数,例如 激活class='relu' 正如问题所暗示的,我想存储模型设置以供以后使用。我知道这些参数是不同函数的一部分,但它们是否都是可能的呢? 我尝试过的: 1. 和 只有回报 序列
问题内容: 在保存模型之前,我需要重新调整图片大小。但是,如何检查是否添加了新图片或仅更新了说明,以便每次保存模型时都可以跳过重新缩放? 我只想在加载新图像或更新图像时重新缩放,而在更新说明时不想要。 问题答案: 一些想法: 不确定是否可以在所有伪自动django工具中正常运行(例如:ModelForm,contrib.admin等)。