总体思路:基于bootstrap4的前端页面上传组件,把excel文件上传至服务器,并利用python pandas读取里面的数据形成字典列表

通过pymongo 接口把数据插入或追加到mongodb相关集合中

  • html部分
<input type="file"  id="excelfile" class="form-control">
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="inlineRadioOptions" id="rebuild" value="option1">
<label class="form-check-label" for="rebuild">重建</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="inlineRadioOptions" id="append" value="option2">
<label class="form-check-label" for="append">附加</label>
</div>
........
<button type="button" id="postbtn" class="btn btn-lg btn-block btn-outline-primary">Sign up for free</button>
  • jquery部分:其中24-26行是确保ajax提交成功的关键
 //radio按键,按下和抬起所代表的不同动作
$(".form-check-input").click(function () {
if(typeof($(this).attr("checked"))=="undefined")
{
$(this).attr("checked","checked")
}
else
{
$(this).removeAttr('checked')
}
}); $("#postbtn").click(function () {
//根据选中的radio,执行相应的操作,追加mongodb的数据集或是
//删除重建
var param = $(".form-check-input:checked").attr("id");
//alert("参数"+param);
var dataform = new FormData();
dataform.append('fileobj',$("#excelfile")[].files[]);
dataform.append('status',param);
$.ajax({
url:'/qingxiniaodao',
type:'post',
mimeType:'multipart/form-data',
contentType:false,
processData:false,
data:dataform,
success:function (data) {
console.log(data)
}
})
});
</script>
  • tornado----python部分
class qingxiniaodao(RequestHandler):
def get(self):
self.render('mongowithpanda.html')
def post(self):
if self.request.files:
#第一步上传文件
filename = self.request.files['fileobj'][]['filename']
param =self.get_argument("status")#如果值为rebuild就重建,append为附加
filename =currentpath+"\\temfile\\"+filename
with open(filename,"wb") as writer:
writer.write(self.request.files['fileobj'][]['body'])
#第二步:读取文件生成dataframe
mydataframe = pandas.read_excel(filename)
print(type(mydataframe.to_json(orient='records')))
self.write(json.dumps({"rets": mydataframe.to_json(orient='records')}))
#第三步获取集合名称----默认每个excel文件只有一个sheet
collectioname = pandas.ExcelFile(filename)
#获取sheet名
print(collectioname.sheet_names[])
#mongodb操作:
client = MongoClient("localhost",)
db = client['olddream']
cols = db[collectioname.sheet_names[]]
if(param=="rebuild"):
cols.remove()
title = []
rets = []
superdict = {}
retlist = []
print("这是表头:", mydataframe.columns)
for i in mydataframe.columns:
title.append(i)
# mydataframe.values----结果集ndarray类型
print("算出数据集的行,列数:", mydataframe.values.shape)
rowcount = mydataframe.values.shape[] # ndarray的行数,--元组
i =
print("打印数据集的值:", mydataframe.values)
print("打印数据集的某行某列:", mydataframe.values[][])
k =
for i in range(, rowcount):
for k in range(, len(title)):
superdict[title[k]] = mydataframe.values[i][k]
retlist.append(superdict)
superdict = {}
i +=
self.write(json.dumps({"rets": retlist}))
insertrows=cols.insert_many(retlist)
self.write(json.dumps({"rets":str(insertrows.inserted_ids)}))

基于tornado python pandas和bootstrap上传组件的mongodb数据添加工具的更多相关文章

  1. Burp Post、Get数据包转为上传multipart/form-data格式数据包

    方法一: 新建一个网页进行上传,代码代码如下: <html> <head></head> <body> <form method="po ...

  2. python 全栈开发,Day75(Django与Ajax,文件上传,ajax发送json数据,基于Ajax的文件上传,SweetAlert插件)

    昨日内容回顾 基于对象的跨表查询 正向查询:关联属性在A表中,所以A对象找关联B表数据,正向查询 反向查询:关联属性在A表中,所以B对象找A对象,反向查询 一对多: 按字段:xx book ----- ...

  3. Python 基于Python实现Ftp文件上传,下载

    基于Python实现Ftp文件上传,下载   by:授客 QQ:1033553122 测试环境: Ftp客户端:Windows平台 Ftp服务器:Linux平台 Python版本:Python 2.7 ...

  4. Python开发篇——基于React-Dropzone开发上传组件

    这次我要讲述的是在React-Flask框架上开发上传组件的技巧.我目前主要以React开发前端,在这个过程中认识到了许多有趣的前端UI框架--React-Bootstrap.Ant Design.M ...

  5. Django与Ajax,文件上传,ajax发送json数据,基于Ajax的文件上传,SweetAlert插件

    一.Django与Ajax AJAX准备知识:JSON 什么是 JSON ? JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation) JSON 是轻 ...

  6. JS组件系列——Bootstrap文件上传组件:bootstrap fileinput

    前言:之前的三篇介绍了下bootstrap table的一些常见用法,发现博主对这种扁平化的风格有点着迷了.前两天做一个excel导入的功能,前端使用原始的input type='file'这种标签, ...

  7. Resumable.js – 基于 HTML5 File API 的文件上传

    Resumable.js 是一个 JavaScript 库,通过 HTML5 文件 API 提供,稳定和可恢复的批量上传功能.在上传大文件的时候通过每个文件分割成小块,每块在上传失败的时候,上传会不断 ...

  8. Bootstrap文件上传组件

    前言:之前的三篇介绍了下bootstrap table的一些常见用法,发现博主对这种扁平化的风格有点着迷了.前两天做一个excel导入的功能,前端使用原始的input type='file'这种标签, ...

  9. 金山云 KS3 Python SDK 多线程并发上传文件;下载断点续传 参考脚本

    并发上传 基于py自带模块 concurrent.futures import ThreadPoolExecutor #!/usr/bin/env python3 # -*- coding:utf-8 ...

随机推荐

  1. 【并行计算-CUDA开发】FPGA 设计者应该学习 OpenCL及爱上OpenCL的十个理由

    为什么要学习OpenCL呢?就目前我所从事的医疗超声领域,超声前端的信号处理器一般是通过FPGA或FPGA+DSP来设计的,高端设备用的是FPGA+ GPU架构.传统的设计方法是通过HDL语言来进行设 ...

  2. SIFT图像配准 python3.6 + opencv3.3代码

    opencv3.x 中部分函数有改变: 1. SIFT:可以采用help(cv2.xfeatures2d)查询 2.drawKeypoints: 同样采用help()方法查询 opencv3 版本si ...

  3. PTA(Basic Level)1022.D进制的A+B

    输入两个非负 10 进制整数 A 和 B (≤230−1),输出 A+B 的 D (1<D≤10)进制数. 输入格式: 输入在一行中依次给出 3 个整数 A.B 和 D. 输出格式: 输出 A+ ...

  4. dual Oracle兼容

    CREATE OR REPLACE VIEW dual ASSELECT NULL::"unknown"WHERE 1 = 1;

  5. 2-SAT问题介绍求解 + 模板题P4782

    (点击此处查看原题) 什么是2-SAT问题 sat 即 Satisfiability,意思为可满足,那么2-SAT表示一些布尔变量只能取true或者false,而某两个变量之间的值存在一定的关系(如: ...

  6. QThread::wait(),一直以来我以为它阻塞的是QThread对象,可是我现在明白,原来阻塞的是这个对象所在的线程(通常是主线程)——所有事情源于 QThread 的事件循环——如果使用继承QThread这一方法,QThread::quit()没有效果,因为这个线程根本就不需要事件循环

    近日,使用QThread,一些问题百思不得其解,看过大牛的文章,恍然大悟啊. 原文 http://hi.baidu.com/dbzhang800/item/c14c97dd15318d17e1f46f ...

  7. js 发送异步请求

    js用XMLHttpRequest发送异步请求 发送GET请求 var xhr = new XMLHttpRequest(); xhr.open('GET',url);//url为请求地址 xhr.r ...

  8. 【转】CNN+BLSTM+CTC的验证码识别从训练到部署

    [转]CNN+BLSTM+CTC的验证码识别从训练到部署 转载地址:https://www.jianshu.com/p/80ef04b16efc 项目地址:https://github.com/ker ...

  9. Nginx请求限制配置

    Nginx请求限制配置 请求限制可以通过两种方式来配置,分别是  连接频率限制和请求频率限制 首先我们要知道什么是http请求和连接,浏览器和服务端首先通过三次握手完成连接,然后发起请求,传输请求参数 ...

  10. mysql system lock

    MySQL从库show processlist出现system lock的原因以及解决方法有哪些? 由于大量的小事物如UPDATE/DELETE table where一行数据,这种只包含一行DML ...