Оптимизируйте xlsxwriter с более чем 300 000 строк - PullRequest
1 голос
/ 17 марта 2020

Мой код в django / python. Я использую xlsxwriter, возможно, это неправильный выбор. Я открыт для других плагинов.

Моя проблема в том, что мне нужно написать более 300 000 строк в Excel, что занимает много времени (несколько часов). Я бы хотел ускорить его.

Вот мой код:

def export_all_agent(request):
    output = io.BytesIO()
    epoch = datetime.now().strftime('_%d-%m-%Y_%H-%M-%S')
    filename = "export_all_agent" + str(epoch) + ".xlsx"
    workbook = xlsxwriter.Workbook(output, {'in_memory': True})
    worksheet = workbook.add_worksheet()
    row = 0
    col = 0
    titles = ['matricule', 'name', 'first name', 'gender', 'birth day', 'status', 'Percentage Worktime',
                'job category', 'grade_name', 'etab name', 'etab siret', 'territoire', 'region']
    agents = Agent.objects.all()
    for i, item in enumerate(titles):
        worksheet.write(row, col + i, item)
    row += 1
    for agent in agents:
        worksheet.write(row, 0, agent.matricule)
        worksheet.write(row, 1, agent.name)
        worksheet.write(row, 2, agent.first_name)
        worksheet.write(row, 3, agent.gender)
        worksheet.write(row, 4, agent.birth_date)
        worksheet.write(row, 5, agent.status)
        worksheet.write(row, 6, agent.percentage_woktime)
        worksheet.write(row, 7, agent.job_category)
        worksheet.write(row, 8, agent.grade_name)
        worksheet.write(row, 9, agent.etablissement.name)
        worksheet.write(row, 10, agent.etablissement.siret)
        worksheet.write(row, 11, agent.etablissement.territoire.name)
        worksheet.write(row, 12, agent.etablissement.territoire.region.name)
        row += 1
    workbook.close()
    output.seek(0)
    response = HttpResponse(output.read(),
                            content_type="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
    response['Content-Disposition'] = "attachment; filename=" + filename
    return response

Видите ли вы какой-нибудь способ его оптимизации? или мне стоит сменить плагин?

Спасибо за помощь!

...