您的位置:

解决ValueError("Fields that will be updated when a row insertion fails ""on conflicts must be provided.")在django出现报错

  发布时间:2023-03-10 22:08:35
报错的原因错误通常是在使用 Django 的方法时出现的。这个错误意味着你调用了方法并指定了参数,但是没有提供需要在冲突时更新的字段。例如,如果你想在冲突时更新 "age" 字段,你应该使用以下代码注意,"age" 字段名称应该放在元组中。如果表中不存在名为 "Sarah" 的行,则会创建一个新行并将 "name" 字段设置为 "Sarah","age" 字段设置为 26。希望这个示例能帮助你理解如何使用方法。

报错的原因

"ValueError: Fields that will be updated when a row insertion fails on conflicts must be provided." 错误通常是在使用 Django 的 `update_or_create()` 方法时出现的。

这个错误意味着你调用了 `update_or_create()` 方法并指定了 `on_conflict_update` 参数,但是没有提供需要在冲突时更新的字段。

例如,如果你想在冲突时更新 "age" 字段,你应该使用以下代码:


MyModel.objects.update_or_create(name="Sarah", defaults={"age": 26}, on_conflict_update=("age",))

注意,"age" 字段名称应该放在元组中。

如果你想在冲突时更新多个字段,你可以将它们放在一个元组中:


MyModel.objects.update_or_create(name="Sarah", defaults={"age": 26, "name": "Sara"}, on_conflict_update=("age", "name"))

如何解决

要解决 "ValueError: Fields that will be updated when a row insertion fails on conflicts must be provided." 错误,你需要在调用 `update_or_create()` 方法时提供 `on_conflict_update` 参数并指定需要在冲突时更新的字段。

例如,如果你想在冲突时更新 "age" 字段,你应该使用以下代码:


MyModel.objects.update_or_create(name="Sarah", defaults={"age": 26}, on_conflict_update=("age",))

注意,"age" 字段名称应该放在元组中。

如果你想在冲突时更新多个字段,你可以将它们放在一个元组中:


MyModel.objects.update_or_create(name="Sarah", defaults={"age": 26, "name": "Sara"}, on_conflict_update=("age", "name"))

使用例子

是的,以下是使用 `update_or_create()` 方法的示例:

首先,我们需要在 Django 项目的某个应用中定义一个模型。例如,我们可以在 "myapp" 应用的 "models.py" 文件中定义以下模型:


from django.db import models

class MyModel(models.Model):
    name = models.CharField(max_length=100)
    age = models.IntegerField()

然后,我们可以使用 `update_or_create()` 方法来更新或创建表中的数据:


from myapp.models import MyModel

# Update or create a row
MyModel.objects.update_or_create(name="Sarah", defaults={"age": 26}, on_conflict_update=("age",))

如果表中已存在名为 "Sarah" 的行,那么它的 "age" 字段将被更新为 26。如果表中不存在名为 "Sarah" 的行,则会创建一个新行并将 "name" 字段设置为 "Sarah","age" 字段设置为 26。

希望这个示例能帮助你理解如何使用 `update_or_create()` 方法。