django 解析上传xls文件
1.解析上传数据
class DataUploadAPIView(APIView):
# authentication_classes = (JSONWebTokenAuthentication, SessionAuthentication)
# permission_classes = (IsAuthenticated,) @transaction.atomic
def post(self, request, *arge, **kwargs):
'''上传数据'''
data = request.data
# {'type': ['0'], 'table_name': ['16'], 'new_table_name': ['11'], 'field_name': ['id'], 'versions': ['0'], 'versions_name': ['222'], 'Fdata': [<InMemoryUploadedFile: drug_base_copy2.xls (application/vnd.ms-excel)>]}
filed_name = request.data['Fdata']
if not filed_name:
raise Forbidden('没有获取到文件')
destination = open(
os.path.join(os.path.dirname(os.path.abspath(__file__)) + '\\excel_upload\\', filed_name.name),
'wb+') # 打开特定的文件进行二进制的写操作
for chunk in filed_name.chunks(): # 分块写入文件
destination.write(chunk)
destination.close()
type_name = data['type']
table_name_id = data['table_name']
new_table_name = data['new_table_name']
field_name = data['field_name']
versions = data['versions']
versions_name = data['versions_name']
table_name = 'database_data_' + DrugTables.objects.filter(pk=table_name_id)[0].table_name
if int(type_name) == int(2):
cursor = connection.cursor()
cursor.execute(f'CREATE TABLE database_data_{new_table_name} LIKE {table_name};')
table_datas = DrugTables.objects.filter(table_name=table_name.replace('database_data_', ''))[0]
DrugTables.objects.create(table_name=new_table_name, table_comment=table_datas.table_comment,
# drug_cls=table_datas.drug_cls, user_cls=table_datas.user_cls)
drug_cls=table_datas.drug_cls, user_cls=request.user)
if str(versions) == str(0):
versions = versions_name
# 读取文件数据
workbook = xlrd.open_workbook(
os.path.join(os.path.dirname(os.path.abspath(__file__)) + '\\excel_upload\\', filed_name.name))
table = workbook.sheets()[0]
# 获取总行数
nrows = table.nrows
head_data = []
queryset = get_query_dawnload(connection, table_name, DATABASES['default']['NAME'])
for sql_info in queryset:
if sql_info['COLUMN_NAME'] != 'id' and sql_info['COLUMN_NAME'] != 'version':
head_data.append(sql_info['COLUMN_NAME']) # 设置标题字段 # 从第三行开始
cursor = connection.cursor()
for x in range(2, nrows):
row = table.row_values(x)
table_data = {}
# 获取数据字段
for i, info in enumerate(head_data):
ctype = table.cell(x, i).ctype
if ctype == 2 and row[i] % 1 == 0:
table_data[info] = int(row[i])
elif ctype == 3:
table_data[info] = xlrd.xldate_as_datetime(row[i], 0)
else:
table_data[info] = str(row[i])
if int(type_name) == int(0):
list_key = []
list_lalues = []
for key, lalues in table_data.items():
list_key.append(key)
list_lalues.append("'" + str(lalues) + "'")
# 拼接sql语句
sql_insert = 'insert into {}({}, version) values({}, "{}")'.format(table_name,
', '.join(list_key),
', '.join(list_lalues), versions)
elif int(type_name) == int(1):
list_lalues = []
field_value = ''
for key, lalues in table_data.items():
list_lalues.append(key + '=' + "'" + str(lalues) + "'")
if key == field_name:
field_value = lalues
lalues = ','.join(list_lalues)
sql_insert = f'update {table_name} set {lalues} where {field_name}="{field_value}" and version="{versions}"' elif int(type_name) == int(2):
list_key = []
list_lalues = []
for key, lalues in table_data.items():
list_key.append(key)
list_lalues.append("'" + str(lalues) + "'")
sql_insert = 'insert into database_data_{}({}, version) values({}, "{}")'.format(new_table_name,
', '.join(list_key),
', '.join(list_lalues),
versions) try:
cursor.execute(sql_insert)
except Exception as e:
raise Forbidden('上传解析失败,第{}指端长度超索引, 错误类型:{}'.format(x + 1, e))
return HttpResponse(json.dumps({"status": "上传数据成功", 'data': filed_name.name}), status=status.HTTP_200_OK)
django 解析上传xls文件的更多相关文章
- java上传xls文件
using System; using System.Collections.Generic; using System.Web; using System.Web.UI; using System. ...
- Springboot/SpringMvc 读取上传 xls 文件内容
/** * 读取上传 xls 内容返回 * @param file * @return */@RequestMapping(value = "/read.xls")@Respons ...
- python发送post请求上传文件,无法解析上传的文件
前言 近日,在做接口测试时遇到一个奇葩的问题. 使用post请求直接通过接口上传文件,无法识别文件. 遇到的问题 以下是抓包得到的信息: 以上请求是通过Postman直接发送请求的. 在这里可以看到消 ...
- input file 上传 判断文件类型、路径是否为空
<html> <body bgcolor="white"> <TABLE cellSpacing=0 cellPadding=0 width=&quo ...
- SpringMVC文件上传 Excle文件 Poi解析 验证 去重 并批量导入 MYSQL数据库
SpringMVC文件上传 Excle文件 Poi解析并批量导入 MYSQL数据库 /** * 业务需求说明: * 1 批量导入成员 并且 自主创建账号 * 2 校验数据格式 且 重复导入提示 已被 ...
- django上传excel文件
def uploadGrade(request): ''' 班级信息导入 :param request: :return: ''' if request.method == 'POST': f = r ...
- java上传excel文件及解析
java上传excel文件及解析 CreateTime--2018年3月5日16:25:14 Author:Marydon 一.准备工作 1.1 文件上传插件:swfupload: 1.2 文件上 ...
- java 解析上传的Excel文件
java poi解析上传的Excel文件 package com.zhl.push.Utils; /** * @Author TAO * @ClassName ExcelData * @Descrip ...
- DJANGO技巧两则:模拟MKDIR -P及配合NGINX上传大文件不使超时
这都是在开发当哪遇到的问题,网上转转,作个记录: http://blog.chinaunix.net/uid-25525723-id-1596574.html http://bookshadow.co ...
随机推荐
- 关于c语言的逻辑短路规则
原来的代码是 if (temp == 3 && (a % b != 0 || b == 0 )){ printf("go"); } dev-c 报错: progra ...
- nginx ubantu 安装步骤
Ubuntu14.04默认安装的是Nginx 1.4.6 如果已经安装,请先卸载sudo apt-get remove nginx最新的稳定版Nginx 1.6.0在ubuntuupdates ppa ...
- Hanlp分词插件docker集群安装
背景:我是用docker-compose的方式装的es集群,正常情况es镜像没有插件,如果在docker里面用命令安装了那么重启以后又没了,所以采用挂载离线安装的方式 版本: es7.2 1下载Han ...
- 利用Jenkins打包并远程部署NodeJS应用
本文Jenkins版本2.190.2,为19年11月最新 1.安装Jenkins.Git和NodeJS Jenkins安装参考:https://www.cnblogs.com/zhi-leaf/p/1 ...
- sqlyog管理关系型数据库mysql数据库之sqlyog的安装管理
.关系型数据库 有库有表,有关系 非关系型数据库 存储对象.集 下面的所有演示截图都是基不超过SQLyog 11进行的. 1. 2.点击上图中的应用程序,进行安装. 安装sqlyog , 账户dd0 ...
- Docker底层原理介绍
1.docker介绍 1.1什么是docker Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源. Docker 可以让开发者打包他们的应用以及依赖包到一个轻 ...
- 图解微信小程序---实现页面的跳转与返回操作
图解微信小程序---实现页面的跳转与返回操作 代码笔记 操作步骤 第一步:在app.json配置文件中,创建跳转页面 第二步:编写首页跳转(注意跳转方式,和设置点击样式类名) 第三步:编写首页样式 第 ...
- 补习系列(12)-springboot 与邮件发送【华为云技术分享】
目录 一.邮件协议 关于数据传输 二.SpringBoot 与邮件 A. 添加依赖 B. 配置文件 C. 发送文本邮件 D.发送附件 E. 发送Html邮件 三.CID与图片 参考文档 一.邮件协议 ...
- ASP.NET Core 中的 Razor 文件编译
asp .net core mvc 3.0 在编译的时候做了一些改变,有些view视图更改需要重新编译,你也可以配置运行时编译,不用每次更改都去重新生成,具体代码如下,从官方文档看到,做个记录. Ra ...
- 好久没写原生的PHP调用数据库代码了分享个
好久没写原生的PHP代码调用数据库了 eader("Content-type: text/html; charset=utf-8"); $time=$symptoms=$attr= ...