gpt4 book ai didi

python - 更新 Django 模型对象的多个字段的有效方法

转载 作者:太空狗 更新时间:2023-10-29 17:01:37 27 4
gpt4 key购买 nike

我正在尝试更新 Django 数据库中的用户。

获取的数据如下:

fetched_data = {
'id': 1,
'first_name': 'John',
'last_name': 'Doe',
'phone': '+32 12',
'mobile_phone': '+32 13',
'email': 'myemail@hotmail.com',
'username': 'myusername'
}

我得到了这个 id 的用户,如下所示:

old_user = User.objects.get(pk=fetched_data['id'])

如果我按如下方式更新用户:

old_user.username = fetched_data['username']
old_user.first_name = fetched_data['first_name']
......
old_user.save()

它工作正常,但我不想对每条记录都这样做,因此我尝试了类似的方法:

for fetched_data_key in fetched_data:
old_user.fetched_data_key = fetched_data['fetched_data_key']
//old_user[fetched_data_key] = fetched_data['fetched_data_key'] --- I tried this way to
old_user.save()

但这行不通。知道如何在不为每条记录都更新用户的情况下更新用户吗?

最佳答案

您可以更新数据库中的行而无需获取和反序列化它; update()可以做到。例如:

User.objects.filter(id=data['id']).update(email=data['email'], phone=data['phone'])

这将发出一个 SQL update 语句,并且比您帖子中的代码快得多。它永远不会获取数据或浪费时间创建 User 对象。

但是,您不能将一大堆更新数据发送到 SQL 数据库并要求它一次将其映射到不同的行。如果您需要快速完成这样的大规模更新,最好的办法可能是将数据插入一个单独的表,然后 update it form a select on that table .据我所知,Django ORM 不支持这一点。

关于python - 更新 Django 模型对象的多个字段的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41744096/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com