I use get_or_create to insert objects into the database, but the problem is that running 1000 takes too much time at once.
I tried bulk_create , but it does not provide me with the necessary functionality (creates duplicates, ignores a unique value, does not cause the post_save signals that I need).
Is it even possible to do get_or_create in bulk with a custom sql query?
Here is my sample code:
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)
related_data contains 1000 lines that look like this:
[{"cmp":0,"ams":3350000,"cpc":0.71,"keyword":"apple."},
{"cmp":0.01,"ams":3350000,"cpc":1.54,"keyword":"apple -10810"}......]
The KW model also sends a signal, which I use to create another parent model:
@receiver(post_save, sender=KW)
def grepw(sender, **kwargs):
if kwargs.get('created', False):
id = kwargs['instance'].id
kww = kwargs['instance'].KWuser
a, b = KeyO.objects.get_or_create(defaults={'keyword': kww}, keyword__iexact=kww)
KW.objects.filter(id=id).update(KWF=a.id)
, , , , ?