Моя проблема заключается в том, что Django вставляет записи waaaaaaay слишком медленно (я даже не время, но это было более 5 минут) для 100k записей из файла CSV Pandas.Я занимаюсь синтаксическим анализом CSV-файла, а затем сохраняю эти объекты в postgresql в Django.Это будет ежедневный cronjob с CSV-файлами, отличающимися для большинства записей (некоторые могут быть дубликатами предыдущих дней или владелец может быть тем же)
Я не пробовал необработанные запросы, но я недумаю, что это очень поможет.и я действительно застрял на этом этапе честно.кроме некоторых итерационных манипуляций и создания генератора, а не итератора, я не могу каким-то образом улучшить время вставки.
class TrendType(models.Model):
""" Описывает тип отчета (посты, видео, субъекты)"""
TREND_TYPE = Choices('video', 'posts', 'owners') ## << mnemonic
title = models.CharField(max_length=50)
mnemonic = models.CharField(choices=TREND_TYPE, max_length=30)
class TrendSource(models.Model):
""" Источник отчета (файла) """
trend_type = models.ForeignKey(TrendType, on_delete=models.CASCADE)
load_date = models.DateTimeField()
filename = models.CharField(max_length=100)
class TrendOwner(models.Model):
""" Владелец данных (группа, юзер, и т.п.)"""
TREND_OWNERS = Choices('group', 'user', '_')
title = models.CharField(max_length=50)
mnemonic = models.CharField(choices=TREND_OWNERS, max_length=30)
class Owner(models.Model):
""" Данные о владельце """
link = models.CharField(max_length=255)
name = models.CharField(max_length=255)
trend_type = models.ForeignKey(TrendType, on_delete=models.CASCADE)
trend_owner = models.ForeignKey(TrendOwner, on_delete=models.CASCADE)
class TrendData(models.Model):
""" Модель упаковка всех данных """
owner = models.ForeignKey(Owner, on_delete=models.CASCADE)
views = models.IntegerField()
views_u = models.IntegerField()
likes = models.IntegerField()
shares = models.IntegerField()
interaction_rate = models.FloatField()
mean_age = models.IntegerField()
source = models.ForeignKey(TrendSource, on_delete=models.CASCADE)
date_trend = models.DateTimeField() # << take it as a date
В принципе, мне бы хотелось хорошее решение для «быстрой» вставки в базу данных ивозможно ли это даже с учетом этих моделей.