当前位置:网站首页> Django上传excel表格并将数据写入数据库的详细步骤
Django上传excel表格并将数据写入数据库的详细步骤
2022-06-30 19:19:00 【1024问】
前言:
一、上传文件:
二、解析 excel 导入数据库
前言:最近公司领导要统计技术部门在各个业务条线花费的工时百分比,而 jira 当前的 Tempo 插件只能统计个人工时。于是就写了个报表工具,将 jira 中导出的个人工时excel表格 导入数据库,在后端处理各个业务工时占比。后来研究了 jira 的 API 文档 ,放弃了之前的思路,直接调用 jira API 处理数据 ,这个先不谈。这篇博客主要介绍 Django 上传文件,然后解析 excel 导入数据库。
一、上传文件:将文件上传到服务器指定路径,其实很简单,一共有三个步骤:
1.配置 setting.py
# 文件上传配置UPLOAD_ROOT = os.path.join(BASE_DIR,'upload')2.前端代码如下,使用 <form> 表单提交,"/upload/" 路由配置在 urls 中,这个就不再多说了。
{% extends 'base.html' %}{% block content %}<body> <form id="form" enctype="multipart/form-data" action="/upload/" method="post"> <p><input type="file" name="file"></p> <input type="submit" name="提交"> </form></body>{% endblock %}3.后端代码如下,这段代码可以上传任意格式的文件,没有校验文件类型。
@csrf_exemptdef upload(request): # 根name取 file 的值 file = request.FILES.get('file') logger.log().info('uplaod:%s'% file) # 创建upload文件夹 if not os.path.exists(settings.UPLOAD_ROOT): os.makedirs(settings.UPLOAD_ROOT) try: if file is None: return HttpResponse('请选择要上传的文件') # 循环二进制写入 with open(settings.UPLOAD_ROOT + "/" + file.name, 'wb') as f: for i in file.readlines(): f.write(i) except Exception as e: return HttpResponse(e) return HttpResponse('上传成功')二、解析 excel 导入数据库1.文件上传结束后,接下来读取刚上传到服务器的 excel 表格,然后写入数据库。所以整个后端代码是这样的:
# 将excel数据写入mysqldef wrdb(filename): # 打开上传 excel 表格 readboot = xlrd.open_workbook(settings.UPLOAD_ROOT + "/" + filename) sheet = readboot.sheet_by_index(0) #获取excel的行和列 nrows = sheet.nrows ncols = sheet.ncols print(ncols,nrows) sql = "insert into working_hours (jobnum,name,workingtime,category,project,date,createtime) VALUES" for i in range(1,nrows): row = sheet.row_values(i) jobnum = row[4] name = row[5] workingtime = row[2] category = row[8] project = row[1] date = xldate_as_datetime(row[3],0).strftime('%Y/%m/%d') values = "('%s','%s','%s','%s','%s','%s','%s')"%(jobnum,name,workingtime,category,project,date,datetime.datetime.now()) sql = sql + values +"," # 为了提高运行效率,一次性把数据 insert 进数据库 sql = sql[:-1] # 写入数据库 # DataConnection 是自定义的公共模块,用的是第三方库,用来操作数据库。没有用 ORM ,后续有 group by 等复杂 sql 不好操作。 DataConnection.MysqlConnection().insert('work',sql)@csrf_exemptdef upload(request): # 根name取 file 的值 file = request.FILES.get('file') print('uplaod:%s'% file) # 创建upload文件夹 if not os.path.exists(settings.UPLOAD_ROOT): os.makedirs(settings.UPLOAD_ROOT) try: if file is None: return HttpResponse('请选择要上传的文件') # 循环二进制写入 with open(settings.UPLOAD_ROOT + "/" + file.name, 'wb') as f: for i in file.readlines(): f.write(i) # 写入 mysql wrdb(file.name) except Exception as e: return HttpResponse(e) return HttpResponse('导入成功')2.数据导入后,通过一些处理就得到了我们想要的数据。报表其中之一的饼图:

到此这篇关于Django上传excel表格并将数据写入数据库的文章就介绍到这了,更多相关Django上传excel表格内容请搜索软件开发网以前的文章或继续浏览下面的相关文章希望大家以后多多支持软件开发网!
边栏推荐
猜你喜欢

图扑软件通过 CMMI5 级认证!| 国际软件领域高权威高等级认证

测试必备工具 —— Postman实战教程

Conditional compilation

FH6908A负极关断同步整流模拟低压降二极管控制IC芯片TSOT23-6超低功耗整流器 1w功耗 <100uA静态 替代MP6908

VR全景添加对比功能,让差异化效果展示更直观!

History, selection strategy and in-depth evaluation of note taking software

mysql统计账单信息(上):mysql安装及客户端DBeaver连接使用

SSM整合流程(整合配置、功能模块开发、接口测试)

1. 爬虫之Beautifulsoup解析库&在线解析图片验证码

正则系列之字符类
随机推荐
力扣------统计包含给定前缀的字符串
当我们在看待产业互联网的时候,总是会站在消费互联网的对立面来看待它
台湾SSS鑫创SSS1700替代Cmedia CM6533 24bit 96KHZ USB音频编解码芯片
RP prototype resource sharing - shopping app
4.3寸触控屏12路控制端口可编程网络中控支持5台中控主机相互备份
腾讯会议应用市场正式上线,首批入驻超20款应用
PS2手柄-1「建议收藏」
Go language learning tutorial (13)
#夏日挑战赛#【FFH】HarmonyOS手机遥控Dayu开发板相机
盘点华为云GaussDB(for Redis)六大秒级能力
SM2246EN+闪迪15131
[JetsonNano] [教程] [入门系列] [一] 如何开启VNC共享
Await and async
WordPress 博客使用火山引擎 veImageX 进行静态资源 CDN 加速(免费)
MQ component (2022.5.16-5.22)
Whether the SQL is indexed
无线充U型超声波电动牙刷方案开发
【已解决】抖音如何取消关注已注销的账户
Makefile笔记(一文学会Makefile)
Kubernetes为什么会赢,容器圈的风云变幻!