Django项目中将mysql的多个表通过openpyxl导出单个excel文件

目前我了解的python操作excel的模块有xlrd/xlwt和openpyxl,其中xlwt针对Ecxec2007之前的版本,即.xls文件,其要求单个sheet不超过65535行,而openpyxl则主要针对Excel2007之后的版本(.xlsx),它对文件大小没有限制

因为openpyxl的文档更加详细而且其中的操作方法也更加多样,所以我做的项目中用openpyxl来导出excel文件,主要功能是将mysql中的多个表数据导入到一个excel文件中,每一个表放在一个sheet中,并提前在每个sheet中放入对应字段名。

openpyxl文档地址https://openpyxl.readthedocs.io/en/stable/

该文章基于你已经初步了解django,并会使用model,并且已经设置好settings中数据库的设置

废话少数,看代码

def export_views(request):
    wb = Workbook()  # optimized_write=True
    # excel名称基于创建时间命名
    sheet_name = 'BLCAdatabase_'+str(time.time()).split('.')[0]+'_'+datetime.datetime.now().strftime('%Y%m%d')
    # Basic_Information是我的model中的,你可以根据自己项目更改
    basic_obj = Basic_Information.objects.all()
    # 第一个sheet就是w1 = wb.create_sheet('sheet名称', 0)
    # 第二个sheet就是w2 = wb.create_sheet('sheet名称', 1)以此类推
    w1 = wb.create_sheet('基本信息', 0)
    # basicname_list是你在每个sheet的第一行插入的信息
    basicname_list = ['...']
    for i in range(1, len(basicname_list) + 1):
        w1.cell(row=1, column=i, value=basicname_list[i - 1])
    excel_row = 2
    # 导入mysql中的数据
    for obj in basic_obj:
        pid = obj.pid
        ...
        obj_list = [pid, ...]
        for i in range(1, len(basicname_list) + 1):
            w1.cell(row=excel_row, column=i, value=obj_list[i - 1])
        excel_row += 1
    response = HttpResponse(content_type='application/msexcel')
    response['Content-Disposition'] = 'attachment;filename=%s.xlsx' % sheet_name
    wb.save(response)
    return response

最后效果如下:

有问题欢迎讨论,毕竟我也是第一次用openpyxl,但最好先看一下openpyxl的文档 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Django中,可以使用Python的内置csv模块来读取CSV文件,然后使用Django的ORM(对象关系映射)将数据保存到MySQL数据库中。以下是示例代码: 1. 首先,创建一个Django命令来执行导入操作。在app目录下创建一个名为“importcsv”的文件夹,并在其中创建一个名为“management”的文件夹。在“management”文件夹中创建一个名为“commands”的文件夹,并在其中创建一个名为“import_csv.py”的Python文件。 ```python # import_csv.py from django.core.management.base import BaseCommand import csv from app.models import MyModel class Command(BaseCommand): help = 'Import data from CSV file' def add_arguments(self, parser): parser.add_argument('csv_file', type=str) def handle(self, *args, **options): csv_file = options['csv_file'] with open(csv_file, 'r') as f: reader = csv.reader(f) for row in reader: obj = MyModel() obj.field1 = row[0] obj.field2 = row[1] obj.field3 = row[2] obj.save() self.stdout.write(self.style.SUCCESS('Data imported successfully!')) ``` 2. 在models.py文件中定义模型类,以便在导入CSV文件时将数据保存到MySQL数据库中。 ```python # models.py from django.db import models class MyModel(models.Model): field1 = models.CharField(max_length=100) field2 = models.CharField(max_length=100) field3 = models.CharField(max_length=100) ``` 3. 运行命令,将CSV文件导入MySQL数据库。 ```bash python manage.py import_csv /path/to/csv/file.csv ``` 其中,/path/to/csv/file.csv是CSV文件的路径。 这个命令将打开CSV文件,读取每一行并将数据保存到MySQL数据库中。可以根据需要修改代码以处理更复杂的CSV文件格式。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值