python Django 导出大量数据 (亲测16w,效率后续在优化吧)

来源:https://blog.csdn.net/u013608482/article/details/80942427

原来写个了导出引发了个错误,excel表中最大行数65336,要做个分表判断
看了下上面的链接中的例子。整理下思路

.先定义单张表的数据总量(不能超过65336)
获取需要导出数据的总数 除以单表的数量 得到 几张表
设置一个集合来装表

  sheets=[]
    wbk=xlwt.Workbook()
    filename = u"Licence日志信息表"
    filename = urlquote(filename)
    response = HttpResponse(content_type='application/vnd.ms-excel')
    response['Content-Disposition'] = 'attachment; filename=%s'%(filename)+ time.strftime('%Y%m%d', time.localtime(time.time())) + '.xls'
    sheet = wbk.add_sheet("Log_0",cell_overwrite_ok=True)  # 创建工作页
    row0 = [u'ID',  u'操作内容', u'操作类型', u'操作人账号', u'操作人', u'操作时间']
    sheets.append(sheet)
    for i in range(0, len(row0)):
        sheets[0].write(0, i, row0[i])

    data = Log.objects.all().filter(L_ID='license') #筛选
    # print(len(data))
    num = 1  #写入第几行
    count =1 #写入第几条数据

    if (len(data))<0:
        sheet.write(num, 0, "没有可以导出的日志信息")  # 工号
    for d in data:
        scount=int(count/65000)
        if(len(sheets)<=scount):
            sheets.append(wbk.add_sheet("Log_%s"%(scount+1),cell_overwrite_ok=True))
            for i in range(0, len(row0)):
                sheets[scount].write(0, i, row0[i])
                num=1
        sheet.write(num, 0, d.ID) #日志ID
        sheet.write(num, 1, d.operation)  #操作内容
        sheet.write(num, 2, d.get_level_display())  # 操作类型
        sheet.write(num, 3, d.UserID) # 操作人ID
        sheet.write(num, 4, "系统" if d.UserID =="系统"  else  User.objects.get(id=d.UserID).name)  # 操作人姓名
        sheet.write(num, 5, "" if d.date == None else d.date.strftime("%Y-%m-%d %H:%M:%S"))  # 操作时间
        num = num + 1
        count=count+1
    wbk.save(response)

猜你喜欢

转载自blog.csdn.net/qq_28218253/article/details/81948542