1.解析上传数据

class DataUploadAPIView(APIView):# authentication_classes = (JSONWebTokenAuthentication, SessionAuthentication)# permission_classes = (IsAuthenticated,)@transaction.atomicdef 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_nameif 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.nrowshead_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).ctypeif 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 = lalueslalues = ','.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)

  

转载于:https://www.cnblogs.com/yoyo1216/p/10893738.html

django 解析上传xls文件相关推荐

  1. 服务器 被 上传 垃圾文件,Django:上传的文件没有被垃圾回收,导致内存问题

    我有一个处理上传文件的Django视图,当它被反复调用时,我们总是会遇到内存溢出错误.(我们在Heroku上,所以每个网络动态都有512mb的内存).在 内存过剩错误表明,每次调用都会增加文件大小的内 ...

  2. vue excel导入mysql详细教程_Vue前端上传EXCEL文件,后端(springBoot+MyBatis+MySQL)解析EXCEL并批量插入/更新数据库...

    文章目录 Vue前端 后端 controller层 service层:如何解析Excel文件 MyBatis:实现批量插入 在mysql中设置唯一索引Unique Index MySQL中的inser ...

  3. vue3采用xlsx库实现上传excel文件,前端解析展示数据(日期转换问题解决)

    项目中需要实现点击导入excel文件后前端进行解析,将数据展示在页面上,确认后上传至后台的功能,为了便于用户查看,可将所有已上传至后台的数据重新展示在页面表格中.具体实现步骤如下: 1.下载插件 np ...

  4. Web项目,网页上传excel文件并解析实战示例

    最近写了一个基于poi解析excel文件的工具类,所以想在web项目中测试一下,就做了这个简单的项目.本项目主要使用了 SpringMVC+RESTful+Maven的风格.适合有一定基础的人员. 源 ...

  5. Django框架(上传Excel文件并读取)

    博主今天整理下Django框架中上传Excel文件并读取 博主是要在管理平台中新增用例的维护功能,想着通过上传Excel文件来展示用例,下面是项目的路径图: 首先先建数据库模型 model.py 可以 ...

  6. django后台接收form-data 格式上传的文件

    1,浏览器端端js程序 浏览器以from-data表单的格式上传文件. 2,django后端处理程序 接收来自浏览器上传的文件,并把文件存储在一指定的路径下. product_id = request ...

  7. Django从理论到实战(part50)--使用模型来处理上传的文件

    学习笔记,仅供参考,有错必纠 文章目录 使用模型来处理上传的文件 `MEDIA_ROOT`和`MEDIA_URL` 限制文件的扩展名 使用模型来处理上传的文件 在定义模型的时候,我们可以给存储文件的字 ...

  8. django图片上传到oss_django 配置阿里云OSS存储media文件的例子

    1. 安装django-aliyun-oss2-storage包 linux上用 pip install django-aliyun-oss2-storage 无报错,顺利安装 windows上报错: ...

  9. django文件——django + jquery-file-upload上传篇(二)-- 插件实现文件上传+进度条显示 +拖入文件上传...

    django + jquery-file-upload 插件实现文件上传+进度条显示 1.model.py class Fujian(models.Model):name = models.CharF ...

最新文章

  1. 全球第二大浏览器升级!内存/CPU占用暴降
  2. Want to archive tables? Use Percona Toolkit’s pt-archiver--转载
  3. JAVA中equals空_Java中为什么查询空字符串跟判断是否为null的时候可以不用equals?...(亲测)
  4. PHP 入门 - 9.安全
  5. spring的bean范围_Spring Bean范围
  6. 大专学的pHp找什么工作,大专毕业能做什么工作 毕业都去干嘛了
  7. dbutils java_Dbutils工具类的使用
  8. ERA5 积雪 降雪 区别_面对大雪吧~2020陕西首场,以下区域积雪将达20厘米
  9. 如何使用Git上传项目代码到github
  10. c语言程序谭浩强第二章,PDF版本_谭浩强c语言程序设计. 第二章 程序的灵魂-算法...
  11. mos管h桥电机驱动电路与设计原理图-KIA
  12. double IE之H3CIE之路--我的H3CIE考试经历
  13. 系统漏洞是威胁计算机网络安全的形式,系统漏洞是威胁计算机网络安全的形式_网络 安全 银行 漏洞 川企_https 安全受到 威胁(2)...
  14. 安卓开发之Intent使用介绍(显式Intent和隐式Intent)
  15. 美国电子烟走向规范化,“下一站”是中国?
  16. python vba 审计_审计工作中有哪些 Excel VBA 的应用?
  17. dell emc isilon解决添加AD域后有时间不同步警告
  18. ca盘显示无证书_CA根证书无法识别
  19. Linux:安装AnyConnect客户端教程
  20. 创业公司的的股权安排

热门文章

  1. 机械加工中304不锈钢与316不锈钢有什么区别?
  2. 软件测试-黑盒测试,白盒测试,灰盒测试
  3. 宝塔php缓存关闭,宝塔面板定期释放PHP占用内存
  4. 某Xavier载板硬件方案
  5. CSS绘制三角形图标
  6. 透过案例看清API接口的作用——演示1688商品详情接口
  7. 【数据库】imp-00015
  8. OpenCV-Python之画椭圆
  9. 计算机中保存和另存为,电脑另存为在哪里
  10. 微信小程序video组件调用腾讯视频的解析