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文件的更多相关文章

  1. java上传xls文件

    using System; using System.Collections.Generic; using System.Web; using System.Web.UI; using System. ...

  2. Springboot/SpringMvc 读取上传 xls 文件内容

    /** * 读取上传 xls 内容返回 * @param file * @return */@RequestMapping(value = "/read.xls")@Respons ...

  3. python发送post请求上传文件,无法解析上传的文件

    前言 近日,在做接口测试时遇到一个奇葩的问题. 使用post请求直接通过接口上传文件,无法识别文件. 遇到的问题 以下是抓包得到的信息: 以上请求是通过Postman直接发送请求的. 在这里可以看到消 ...

  4. input file 上传 判断文件类型、路径是否为空

    <html> <body bgcolor="white"> <TABLE cellSpacing=0 cellPadding=0 width=&quo ...

  5. SpringMVC文件上传 Excle文件 Poi解析 验证 去重 并批量导入 MYSQL数据库

    SpringMVC文件上传 Excle文件 Poi解析并批量导入 MYSQL数据库  /** * 业务需求说明: * 1 批量导入成员 并且 自主创建账号 * 2 校验数据格式 且 重复导入提示 已被 ...

  6. django上传excel文件

    def uploadGrade(request): ''' 班级信息导入 :param request: :return: ''' if request.method == 'POST': f = r ...

  7. java上传excel文件及解析

      java上传excel文件及解析 CreateTime--2018年3月5日16:25:14 Author:Marydon 一.准备工作 1.1 文件上传插件:swfupload: 1.2 文件上 ...

  8. java 解析上传的Excel文件

    java poi解析上传的Excel文件 package com.zhl.push.Utils; /** * @Author TAO * @ClassName ExcelData * @Descrip ...

  9. DJANGO技巧两则:模拟MKDIR -P及配合NGINX上传大文件不使超时

    这都是在开发当哪遇到的问题,网上转转,作个记录: http://blog.chinaunix.net/uid-25525723-id-1596574.html http://bookshadow.co ...

随机推荐

  1. 关于c语言的逻辑短路规则

    原来的代码是 if (temp == 3 && (a % b != 0 || b == 0 )){ printf("go"); } dev-c 报错: progra ...

  2. nginx ubantu 安装步骤

    Ubuntu14.04默认安装的是Nginx 1.4.6 如果已经安装,请先卸载sudo apt-get remove nginx最新的稳定版Nginx 1.6.0在ubuntuupdates ppa ...

  3. Hanlp分词插件docker集群安装

    背景:我是用docker-compose的方式装的es集群,正常情况es镜像没有插件,如果在docker里面用命令安装了那么重启以后又没了,所以采用挂载离线安装的方式 版本: es7.2 1下载Han ...

  4. 利用Jenkins打包并远程部署NodeJS应用

    本文Jenkins版本2.190.2,为19年11月最新 1.安装Jenkins.Git和NodeJS Jenkins安装参考:https://www.cnblogs.com/zhi-leaf/p/1 ...

  5. sqlyog管理关系型数据库mysql数据库之sqlyog的安装管理

    .关系型数据库 有库有表,有关系 非关系型数据库  存储对象.集 下面的所有演示截图都是基不超过SQLyog 11进行的. 1. 2.点击上图中的应用程序,进行安装. 安装sqlyog , 账户dd0 ...

  6. Docker底层原理介绍

    1.docker介绍 1.1什么是docker Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源. Docker 可以让开发者打包他们的应用以及依赖包到一个轻 ...

  7. 图解微信小程序---实现页面的跳转与返回操作

    图解微信小程序---实现页面的跳转与返回操作 代码笔记 操作步骤 第一步:在app.json配置文件中,创建跳转页面 第二步:编写首页跳转(注意跳转方式,和设置点击样式类名) 第三步:编写首页样式 第 ...

  8. 补习系列(12)-springboot 与邮件发送【华为云技术分享】

    目录 一.邮件协议 关于数据传输 二.SpringBoot 与邮件 A. 添加依赖 B. 配置文件 C. 发送文本邮件 D.发送附件 E. 发送Html邮件 三.CID与图片 参考文档 一.邮件协议 ...

  9. ASP.NET Core 中的 Razor 文件编译

    asp .net core mvc 3.0 在编译的时候做了一些改变,有些view视图更改需要重新编译,你也可以配置运行时编译,不用每次更改都去重新生成,具体代码如下,从官方文档看到,做个记录. Ra ...

  10. 好久没写原生的PHP调用数据库代码了分享个

    好久没写原生的PHP代码调用数据库了 eader("Content-type: text/html; charset=utf-8"); $time=$symptoms=$attr= ...