gpt4 book ai didi

sql - Django - SQL 批量 get_or_create 可能吗?

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

我正在使用 get_or_create 将对象插入数据库,但问题是一次执行 1000 个对象需要很长时间。

我试过 bulk_create 但它没有提供我需要的功能(创建重复项、忽略唯一值、不触发我需要的 post_save 信号)。

是否可以通过自定义的 sql 查询批量执行 get_or_create?

这是我的示例代码:

related_data = json.loads(urllib2.urlopen(final_url).read())

for item in related_data:

kw = item['keyword']
e, c = KW.objects.get_or_create(KWuser=kw, author=author)
e.project.add(id)
#Add m2m to parent project

related_data 包含 1000 行,如下所示:

[{"cmp":0,"ams":3350000,"cpc":0.71,"keyword":"apple."},
{"cmp":0.01,"ams":3350000,"cpc":1.54,"keyword":"apple -10810"}......]

KW 模型还发送我用来创建另一个父模型的信号:

@receiver(post_save, sender=KW)
def grepw(sender, **kwargs):
if kwargs.get('created', False):
id = kwargs['instance'].id
kww = kwargs['instance'].KWuser
# KeyO
a, b = KeyO.objects.get_or_create(defaults={'keyword': kww}, keyword__iexact=kww)
KW.objects.filter(id=id).update(KWF=a.id)

这可行,但正如您想象的那样,一次处理数千行需要很长时间,甚至会使我的小型服务器崩溃,我有哪些批量选项?

最佳答案

从 Django 2.2 开始,bulk_create 有一个 ignore_conflicts 标志。每the docs :

On databases that support it (all but Oracle), setting the ignore_conflicts parameter to True tells the database to ignore failure to insert any rows that fail constraints such as duplicate unique values

关于sql - Django - SQL 批量 get_or_create 可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33991353/

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