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)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值