Django Массовая загрузка больших файлов - PullRequest
0 голосов
/ 06 ноября 2019

Я хочу загрузить файл xlsx в свою базу данных. Я попытался загрузить файл, используя пакет Openpyxl и параметр bulk_create в django, как указано ниже, model.py,

class cardata(models.Model):
    Name= models.CharField(max_length = 60, db_column = 'Name')
    Model_Type= models.CharField(max_length = 60, db_column = 'Model_Type')
    ......

    objects = models.Manager()
    pdobjects = DataFrameManager()

    def __str__(self):
            field_values = []
            for field in self._meta.get_fields():
                field_values.append(str(getattr(self, field.name, '')))
            return ' '.join(field_values)

views.py,

def upload(request):
    if request.method == "POST":
        excel_file = request.FILES["excel_file"]
        wb = openpyxl.load_workbook(excel_file, data_only=True)
        worksheet = wb.worksheets[0]
        excel_data = list()
        for row in worksheet.iter_rows():
            row_data = list()
            for cell in row:
                if cell.value=='':
                    cell.value='None'
                row_data.append(str(cell.value).strip())
            excel_data.append(row_data)
        df = pd.DataFrame(columns=excel_data[0], data=excel_data[1:])
        df_records = df.to_dict('records')

        model_instances = [cardata(
            Name =record['Name'],
            Model_type =record['Model_type'],
            Year =record['Year'],
            Make =record['Make'],
            .......
        ) for record in df_records]

        cardata.objects.bulk_create(model_instances)
        return render('success.html')
    else:
        return render('upload_form.html')

Приведенный выше код отлично работает для загружаемого файла с меньшим объемом данных. Когда я пытаюсь загрузить файл, содержащий более 5 строк, мне выдается

MemoryError at /upload/

У меня естьиметь дело с большими наборами данных. Предложите мне более простой и быстрый способ загрузки данных в модель базы данных или некоторые коды.

Заранее спасибо.

...