【问题标题】:How do I retrieve the row data from my Django database as a list?如何从我的 Django 数据库中检索行数据作为列表?
【发布时间】:2017-03-06 09:33:54
【问题描述】:

我想以列表的形式检索 Django 数据库表行中的数据,以便可以对其进行迭代并将列表的每个值写入 Excel 电子表格。我尝试使用字典来执行此操作,但字典在 Python 中没有排序,所以我的列都乱了序。我需要我的 Excel 电子表格看起来与我的数据库表相同,而不是随机排列。我怎样才能做到这一点?

当前代码:

def dump_attorneys_to_xlsx(request):
    if request.GET.get('export'):
        output = BytesIO()
        workbook = xlsxwriter.Workbook(output, {'in_memory': True})
        worksheet = workbook.add_worksheet('Summary')

        attorneys = Attorney.objects.all().values()
        # Write header
        worksheet.write_row(0, 0, attorneys[0].keys())
        # Write data
        for row_index, row_dict in enumerate(attorneys, start=1):
            worksheet.write_row(row_index, 0, row_dict.values())
        workbook.close()

        output.seek(0)

        response = HttpResponse(output.read(), content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
        response['Content-Disposition'] = 'attachment; filename=summary.xlsx'

【问题讨论】:

    标签: python mysql django excel django-queryset


    【解决方案1】:

    您可以使用 csv.DictWriter 对象,它可以获取字典列表而不是列表,或者使用 QuerySet 的 values_list 方法而不是 values 返回行列表而不是字典。


    否则,您可以使用以下命令写入文件(性能不是很好):

    keys = attorneys[0].keys()
    worksheet.write_row(0, 0, keys)
    # Write data
    for row_index, row_dict in enumerate(attorneys, start=1):
        row = [row_dict[k] for k in keys]
        worksheet.write_row(row_index, 0, row)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-09
      • 2019-02-19
      • 2012-05-03
      • 2018-12-09
      相关资源
      最近更新 更多