gpt4 book ai didi

python - 使用 Django bulk_create() 函数时,'dict' 对象没有属性 'pk'

转载 作者:行者123 更新时间:2023-11-28 18:56:58 29 4
gpt4 key购买 nike

我有一个包含 2 个字段的 counters 表:datevalue

我有一个很大的对象列表需要插入到表 counters 中。但是对列表中的每一行使用 serializer.save() ,会有很多插入,如果我有很多数据,数据插入完成需要一些时间。

为了解决这个问题,我查看了 Django 的文档,发现有一个名为 bulk_create 的函数可以帮助我在 1 个查询中将对象列表插入表中。

现在,这是我的代码:

models.py:

class CounterFileData(models.Model):
date = models.DateTimeField()
value = models.FloatField()

serializers.py:

class CounterFileDataSerializer(serializers.ModelSerializer):
class Meta:
model = CounterFileData
fields = ['date', 'value']

以及我使用 bulk_create 的代码:

objs = (CounterFileData(date=row.date, value=row.value) for row in parsed_data)

batch = list(parsed_data)
CounterFileData.objects.bulk_create(batch)

row 具有以下架构。例如:

{
"date": "2018-12-31T22:00:00"
"value": 9.23129792740622e-05
}

当我尝试这样做时 CounterFileData.objects.bulk_create(batch) 我收到以下错误:

AttributeError: 'dict' object has no attribute 'pk'

有人能告诉我为什么它不返回属性 'pk' 吗?我在这件事上苦苦挣扎了好几个小时,但我仍然找不到解决办法。

提前致谢。

最佳答案

您可以通过下标获取对应键在字典中的值,例如:

objs = [CounterFileData(date=row<b>['date']</b>, value=row<b>['value']</b>) for row in parsed_data]

此外,您parsed_data 传递给了 list(..) 构造函数,而它应该是 objs。然而,通过使用列表理解,我们可以忽略它。

<b>batch</b> = [CounterFileData(date=row['date'], value=row['value']) for row in parsed_data]
CounterFileData.objects.bulk_create(batch)

关于python - 使用 Django bulk_create() 函数时,'dict' 对象没有属性 'pk',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57220088/

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