【发布时间】:2016-03-03 15:51:48
【问题描述】:
我正在使用 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)
这可行,但您可以想象一次处理数千行需要很长时间,甚至会导致我的小型服务器崩溃,我有哪些批量选项?
【问题讨论】:
标签: sql django postgresql django-models