gpt4 book ai didi

python - 如何在 `update` 中为 JSONField 使用 Django F() 表达式

转载 作者:行者123 更新时间:2023-12-05 03:24:17 26 4
gpt4 key购买 nike

我的 postgres 数据库中有大约 1200 万条记录需要更新(因此我需要以高效的方式进行更新)。我正在使用 Django。

我必须更新 jsonfield 列 (extra_info) 以使用同一模型中不同列(related_type_id,它是一个整数)的值。

尝试通过 更新 来完成。这似乎是最有效的方法。示例:

Person.objects.all().update(extra_info={
"type": "Human",
"id": F('related_type_id')
})

此错误显示:“类型 F 的对象不是 JSON 可序列化的”。我认为 F() 将返回该列的值(应该是一个整数),该值应该是可序列化的。这可以做到吗?还是我试图以错误的方式进行操作。我真的不想在 for 循环中迭代并使用 save() 更新每条记录,因为这会花费太长时间。记录太多了。

最佳答案

Django数据库函数JSONObject应该工作,它从键值对返回一个有效的 JSON 对象,并且可以传递 F 对象

from django.db.models import F, Value
from django.db.models.functions import JSONObject

Person.objects.all().update(extra_info=JSONObject(
type=Value('Human'),
id=F('related_type_id')
))

关于python - 如何在 `update` 中为 JSONField 使用 Django F() 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72322295/

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