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
因为我们要在后台保存,所以我们需要重写ModelAdminsave_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文件的更多相关文章

  1. Java解析导入Excel文件后台代码实现

    使用MultipartFile上传Excel文件后端代码实现:(springmvc下的spring-webmvc (MultipartFile )上传) 由于POST一个包含文件上传的Form会以mu ...

  2. 一步步实现ABAP后台导入EXCEL到数据库【3】

    在一步步实现ABAP后台导入EXCEL到数据库[2]里,我们已经实现计划后台作业将数据导入数据库的功能.但是,这只是针对一个简单的自定义结构的导入程序.在实践应用中,面对不同的表.不同的导入文件,我们 ...

  3. 一步步实现ABAP后台导入EXCEL到数据库【1】

    在SAP的应用当中,导入.导出EXCEL文件的情况是一个常见的需求,有时候用户需要将大量数据定期导入到SAP的数据库中.这种情况下,使用导入程序在前台导入可能要花费不少的时间,如果能安排导入程序为后台 ...

  4. springMVC(5)---导入excel文件数据到数据库

    springMVC(5)---导入excel文件数据到数据库 上一篇文章写了从数据库导出数据到excel文件,这篇文章悄悄相反,写的是导入excel文件数据到数据库.上一篇链接:springMVC(4 ...

  5. 基于yaf框架和uploadify插件,做的一个导入excel文件,查看并保存数据的功能

    思路: 1.首先,页面前端,上传附件,提交给后台,并带一个随机性的参数(可以用时间戳): 2.后端接收附件,做一系列的逻辑处理,无误后,将对应的文件存储在上传的目录下: 3.然后前端,上传附件成功后, ...

  6. .Net MVC 导入导出Excel总结(三种导出Excel方法,一种导入Excel方法) 通过MVC控制器导出导入Excel文件(可用于java SSH架构)

    .Net MVC  导入导出Excel总结(三种导出Excel方法,一种导入Excel方法) [原文地址] 通过MVC控制器导出导入Excel文件(可用于java SSH架构)   public cl ...

  7. Java POI导入Excel文件

    今天在公司需要做个导入Excel文件的功能,所以研究了一下,参考网上的一些资料总算是做出来了,在此记录一下防止以后忘记怎么弄. 本人用的是poi3.8,所以需要的JAR包如下: poi-3.8.jar ...

  8. phpexcel导入excel文件报the filename xxx is not recognised as an OLE file错误。

    工作中频繁会用phpexcel类导入excel文件的数据到数据库,目前常用的excel文件格式有:xls.csv.xlsx. 刚开始,针对xls文件,使用如下程序,能正常运行: $objReader ...

  9. YII使用PHPExcel导入Excel文件的方法

    1.下载phpexcel,将压缩包中的classes复制到protected/extensions下并修改为PHPExcel. 2.修改YII配置文件config/main.php 'import'= ...

随机推荐

  1. 10 个强大的JavaScript / jQuery 模板引擎推荐

    模板引擎是为了使用户界面与业务数据(内容)分离而产生的,它可以生成特定格式的文档.由于在开发过程中,网站或应用程序的界面与数据实现分离,大大提升了开发效率,良好的设计也使得代码重用变得更加容易. 本文 ...

  2. 20个优秀的JavaScript 键盘事件处理库

    键盘事件是 Web 开发中最常用的事件之一,通过对键盘事件的捕获和处理可以提高网站的易用性和交互体验.下面,我们向大家介绍收集的20款优秀的 JavaScript 键盘事件处理库,帮助开发人员轻松处理 ...

  3. Storm ack和fail机制再论

    转自:http://www.cnblogs.com/fxjwind/p/3806404.html 之前对这个的理解有些问题,今天用到有仔细梳理了一遍,记录一下 首先开启storm tracker机制的 ...

  4. 转载: erlang连接mysql

    转自:http://blog.csdn.net/flyinmind/article/details/7740540 项目中用到erlang,同时也用到mysql.惯例,google. 但是,按照网上说 ...

  5. MySQL Date函数的正确用法

    以下的文章主要介绍的是MySQL Date函数的实际应用其中包括如何获取当前时间的具体操作,Unix时间的具体应用,时间前后.时间间隔与时间转换的实际内容描述,以下就是文章的主要内容. MySQL D ...

  6. 使用Base SDK 6.1编译的APP在iOS7的设备上运行,NavigationBar覆盖view的解决办法

    if (__IPHONE_OS_VERSION_MAX_ALLOWED <= __IPHONE_6_1) { self.navigationController.navigationBar.tr ...

  7. 【HMM】隐马尔科夫模型

    http://www.hankcs.com/nlp/hmm-and-segmentation-tagging-named-entity-recognition.html

  8. Unity3d实现幸运转盘

    完成效果 我说一下制作流程,然后再看后面的代码1.创建一个image,选择我们的转盘背景图,素材找我或者网上都有,不多说了哈:2.创建一个空物体,位于转盘的正中心,因为我们的转盘指针的旋转中心是根据空 ...

  9. 【转】Internet与Intranet区别

    提起Internet,大家都知道它是一个蓬勃发展的国际互联网. 而Intranet则是近两年才发展起来的新事物,通常被称作企业内部网. Internet是一组全球范围内信息资源的名字.这些资源非常巨大 ...

  10. C/C++ 头文件以及库的搜索路径

    关键点: 1. #include <...> 不会搜索当前目录 2. 使用 -I 参数指定的头文件路径仅次于 搜索当前路径. 3. gcc -E -v 可以输出头文件路径搜索过程 C++编 ...