在不检查PK的情况下在bulk_create中组合unique_field

问题描述 投票:0回答:0

我正在尝试从多个 API 导入数据,但可能会出现重复。我正在尝试批量创建而不重复。所有 API 来源都没有为我提供唯一标识符。我想知道处理这种情况的最佳方法是什么。我尝试过的如下:

 if 'rounds' in response:
    print('=== Syncing Rounds ===')
    rounds = response.get('rounds')
    objs = [
        Round(
            name         = item.get('name'),
            season       = Season.objects.get(id = item.get('seasonId')),
            competition  = Competition.objects.get(id = item.get('competitionId')),
            round_number = item.get('roundNumber'),
        )
        for item in rounds
    ]
    Round.objects.bulk_create(
        objs,update_conflicts=True, 
        update_fields=['name','season','competition','round_number'],
        unique_fields=['id'])

我尝试设置

ignore_conflicts = True
,但这种方法对我没有帮助。

整数范围为1-30,季节为年份。在给定的情况下,我不能使一个字段唯一,例如回合数、季节或比赛。它必须寻找所有三个。例如,2023 年第 1 轮比赛 112 只能有一行。整个组合都是独一无二的。

最终目标是确保没有重复条目或更新现有行。

一个 hack(如 OP 所说)解决方案是在多列唯一约束 Django 上批量插入

django django-rest-framework bulkinsert
© www.soinside.com 2019 - 2024. All rights reserved.