gpt4 book ai didi

python - 如何根据Django中的某些字段查找重复记录

转载 作者:行者123 更新时间:2023-12-05 00:59:16 26 4
gpt4 key购买 nike

我需要在查询集中创建新字段来标记记录是否重复。我将 2 个字段的连接值视为标识符。如果它们在查询集中(连接的字段)中出现的次数超过一次,则该记录被视为重复。

首先,在我的查询集上,我从现有的 2 个字段创建另一个字段,即案件编号和听证日期。他们的输出字段名称是 dupe_id

    qs = file.objects.annotate(
dupe_id=Concat(
F('case_no')
, F('hearing_date')
, output_field=CharField()
)
)

然后我测试这个 dupe_id 字段的计数。如果计数大于1,则认为是重复的

    dupes = qs.values('dupe_id').annotate(dupe_count=Count('dupe_id')).filter(dupe_count__gt=1)

此时,我现在有了另一个查询集,其中包含来自原始查询集的重复值。以下是从查询集类型的 dupe 对象中看到的记录。它还说明了找到该值的实例数

<QuerySet [{'dupe_id': 'Test Case No.2018-12-26', 'dupe_count': 3}, {'dupe_id': '123452018-12-26', 'dupe_count': 2}]>

现在这是我遇到一些困难的地方。我的想法是,我将在我的主查询集上做一个注释,我将使用 dupes 查询集来帮助识别需要标记为重复的记录。

我试过了:

    qs = qs.annotate(
dupe_id2 = Value(('duplicate' if dupes.filter(dupe_id__exact=Concat(F('case_no'), F('hearing_date')))[0] else '--'), output_field=CharField())
)

这只是一个简单的测试,如果在 dupes 查询集中看到连接的值,则该字段将被标记为重复,如果没有则标记为“--”。

但它似乎没有按预期工作。即使我有 1 条不应该被标记为重复的记录,所有记录都被标记为重复。

我还使用条件表达式进行了检查,但我将无法使用我创建的 dupes 查询集。

如果有更可靠的方法将查询集中的记录标记为重复,请告诉我。

最佳答案

处理重复项的一种方法是使用以下算法:
SQL 中的 GroupBy > 查找重复项 > 循环重复项

from django.db.models import Max, Count

# Getting duplicate files based on case_no and hearing_date
files = File.objects.values('case_no', 'hearing_date') \
.annotate(records=Count('case_no')) \
.filter(records__gt=1)

# Check the generated group by query
print files.query

# Then do operations on duplicates
for file in files:
File.objects.filter(
case_no=file['case_no'],
hearing_date=file['hearing_date']
)[1:].update(duplicate=True)

关于python - 如何根据Django中的某些字段查找重复记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54249645/

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