django后台导入excel文件
1.django 如何从后台上传excel中批量解析数据
要从django后台导入的excel中批量解析数据,举一个例子,我们向后抬批量导入svn历史数据
数据格式
假设excel表中有4列,每列分别是版本号,属性,属性值,仓库地址
2.第一步,新建一个app,然后在app中新建model
@python_2_unicode_compatible
class KNSVNHistory(models.Model):
revision = models.IntegerField(verbose_name=u"修订版本", blank=True, null=True)
prop = models.CharField(verbose_name=u'SVN属性', choices=constants.YD_SVN_PROP_CHOICE, max_length=60,
default=constants.YD_SVN_PROP_DATE)
value = models.TextField(verbose_name=u"SVN属性值", blank=False, null=False, default=u"")
repo = models.CharField(max_length=100, verbose_name=u"SVN仓库", blank=False, null=False)
editor = models.ForeignKey(User, verbose_name=u"编辑者", blank=True, null=True)
ctime = models.DateTimeField(verbose_name=u"创建时间", auto_now_add=True, )
mtime = models.DateTimeField(verbose_name=u"修改时间", auto_now=True, )
class Meta:
ordering = ['ctime']
def __str__(self):
return self.value
如上代码,我自己创建了用来保存数据的model,方便我们从后台导入数据
接下来我们创建后台上传文件的接口
@python_2_unicode_compatible
class ImportFile(models.Model):
file = models.FileField(upload_to='File')
name = models.CharField(max_length=50, verbose_name=u'文件名')
class Meta:
ordering = ['name']
def __str__(self):
return self.name
下面就是我们解析excle的功能部分,在app下新建一个utils.py文件
from openpyxl import Workbook,load_workbook
from openpyxl.utils import get_column_letter
from .models import KNSVNHistory
from openpyxl.compat import range
def import_user(self, request, obj, change):
wb = load_workbook(filename=obj.YDUserFile.path)
ws = wb.get_sheet_names()
ws = wb.get_sheet_by_name(ws[0])
headers = ['version', 'attr', 'value', 'addr']
lists = []
users = request.user
for row in range(2, 5):
r = {}
for col in range(1, len(headers) + 1):
key = headers[col - 1]
r[key] = ws.cell(row=row, column=col).value
lists.append(r)
sqllist = []
for cell in lists:
# for header in headers:
revision = cell['version']
prop = cell['attr']
value = cell['value']
repo = cell['addr']
sql = KNSVNHistory(revision=revision, prop=prop, value=value, repo=repo, editor=users)
sqllist.append(sql)
KNSVNHistory.objects.bulk_create(sqllist)
打开admin.py
因为我们要在后台保存,所以我们需要重写ModelAdmin的save_mode
from .utils import import_user
class KNImportFileAdmin(admin.ModelAdmin):
list_display = ('file','name',)
list_filter = ['name',]
def save_model(self, request, obj, form, change):
re = super(YDImportFileAdmin,self).save_model(request, obj, form, change)
import_user(self, request, obj, change)
return re
在上面的代码中使用了第三方库openpyxl来解析excel
关键点在于获取文件对象的时候,我们是通过传过来的obj对象来获取fileobj,其实通俗来讲就是在我们点击上传的时候,重写的save_mode方法拦截了整个对象,我们在这里拿出我们要解析的excel文件对象进行解析,后面的解析过程也比较简单,我们将每行数据解析之后通过字典来保存,然后再用key访问取到进行数据库操作,在数据库操作的时候我们使用KNSVNHistory.objects.bulk_create 来提高效率。
django后台导入excel文件的更多相关文章
- Java解析导入Excel文件后台代码实现
使用MultipartFile上传Excel文件后端代码实现:(springmvc下的spring-webmvc (MultipartFile )上传) 由于POST一个包含文件上传的Form会以mu ...
- 一步步实现ABAP后台导入EXCEL到数据库【3】
在一步步实现ABAP后台导入EXCEL到数据库[2]里,我们已经实现计划后台作业将数据导入数据库的功能.但是,这只是针对一个简单的自定义结构的导入程序.在实践应用中,面对不同的表.不同的导入文件,我们 ...
- 一步步实现ABAP后台导入EXCEL到数据库【1】
在SAP的应用当中,导入.导出EXCEL文件的情况是一个常见的需求,有时候用户需要将大量数据定期导入到SAP的数据库中.这种情况下,使用导入程序在前台导入可能要花费不少的时间,如果能安排导入程序为后台 ...
- springMVC(5)---导入excel文件数据到数据库
springMVC(5)---导入excel文件数据到数据库 上一篇文章写了从数据库导出数据到excel文件,这篇文章悄悄相反,写的是导入excel文件数据到数据库.上一篇链接:springMVC(4 ...
- 基于yaf框架和uploadify插件,做的一个导入excel文件,查看并保存数据的功能
思路: 1.首先,页面前端,上传附件,提交给后台,并带一个随机性的参数(可以用时间戳): 2.后端接收附件,做一系列的逻辑处理,无误后,将对应的文件存储在上传的目录下: 3.然后前端,上传附件成功后, ...
- .Net MVC 导入导出Excel总结(三种导出Excel方法,一种导入Excel方法) 通过MVC控制器导出导入Excel文件(可用于java SSH架构)
.Net MVC 导入导出Excel总结(三种导出Excel方法,一种导入Excel方法) [原文地址] 通过MVC控制器导出导入Excel文件(可用于java SSH架构) public cl ...
- Java POI导入Excel文件
今天在公司需要做个导入Excel文件的功能,所以研究了一下,参考网上的一些资料总算是做出来了,在此记录一下防止以后忘记怎么弄. 本人用的是poi3.8,所以需要的JAR包如下: poi-3.8.jar ...
- phpexcel导入excel文件报the filename xxx is not recognised as an OLE file错误。
工作中频繁会用phpexcel类导入excel文件的数据到数据库,目前常用的excel文件格式有:xls.csv.xlsx. 刚开始,针对xls文件,使用如下程序,能正常运行: $objReader ...
- YII使用PHPExcel导入Excel文件的方法
1.下载phpexcel,将压缩包中的classes复制到protected/extensions下并修改为PHPExcel. 2.修改YII配置文件config/main.php 'import'= ...
随机推荐
- 逻辑斯特回归(logistic regression)的迭代变权最小平方差算法(IRLS)
参考资料:http://blog.csdn.net/xuanyuansen/article/details/41050507 习题: 数据及代码: https://pan.baidu.com/s/1 ...
- 深度可分离卷积结构(depthwise separable convolution)计算复杂度分析
https://zhuanlan.zhihu.com/p/28186857 这个例子说明了什么叫做空间可分离卷积,这种方法并不应用在深度学习中,只是用来帮你理解这种结构. 在神经网络中,我们通常会使用 ...
- MyEclipse实现xml的自动提示
每次出现不能自动提示,蛮烦的.虽然不是一个很难的问题,但是有时候就是记得这个很简单的几步,所以记录下来以备用. 现在mybatis主要是3版本,即此时根据版本3来写的,别的都一样. 1,下载dtd文件 ...
- (转)学习linux的几本书
成为一名精通 Linux 程序设计的高级程序员一直是不少朋友孜孜以求的目标.根据中华英才网统计数据,北京地区 Linux 程序员月薪平均为 Windows 程序员的 1.8 倍.Java 程序员的 2 ...
- VirtualBox 配置虚拟网卡(桥接),实现主机-虚拟机网络互通
记录下VirtualBox 配置虚拟网卡(桥接),实现主机-虚拟机网络互通过程,网上搜出来的比较乱,讲的不明不白,因此根据自己弄过一次,确认可行的方式,做个备份,方便日后查阅. 环境: 在Oracle ...
- 【matlab】图像直方图
使用imhist函数(要先用rgb2gray转化为灰度图像) 利用matlab计算图像直方图函数为imhist() 具体用法: imhist( i );直接显示图像i的灰度直方图: imhist(i, ...
- [mysql] Install/Remove of the Service Denied
在windos 的cmd下安装mysql 在mysql的bin目录下面执行: mysqld --install 报错: 信息如下: Install/Remove of the Service Deni ...
- 第四章 Spring.Net 如何管理您的类___让对象了解自己的容器
我们在开发中,经常需要让对象了解自己所在的容器的信息,例如,有时我们需要让对象知道,对象所在容器的引用是什么,或者是对象在容器中的名称是什么 .Spring.Net 中提供了两个接口,我们使用这两个接 ...
- 一、NHibernate配置所支持的属性
属性名 用途 dialect 设置NHibernate的Dialect类名 - 允许NHibernate针对特定的关系数据库生成优化的SQL 可用值: full.classname.of.Dialec ...
- object - c 语言基础 进阶笔记 随笔笔记
重点知识Engadget(瘾科技)StackOverFlow(栈溢出)Code4Apprespon魏先宇的程序人生第一周快捷键: Alt+上方向键 跳到最上面 Alt+下方向键 跳到最下面 ...