django 导入Excel文件 ORM 批量操作

导入excel文件后批量插入"bulk_create"方法

1.先定义数据模型

from django.db import models
from django.utils.translation import ugettext_lazy as _

ACTIVE_TYPE = (
    (1, _(u"已激活")),
    (0, _(u"未激活")),
)

class Unit(models.Model):
    """
    社会单位
    """
    id = models.AutoField(primary_key=True, editable=False)
    name = models.CharField(_(u"单位名称"), max_length=100, unique=True, db_index=True)
    address = models.CharField(_(u"单位地址"), max_length=100, null=True, blank=True, db_index=True)
    contactperson = models.CharField(_(u"联系人"), max_length=30, null=True, blank=True, db_index=True)
    contactnumber = models.CharField(_(u"联系人电话"), max_length=30, null=True)
    rc_group_id = models.CharField(_(u"融云群组ID"), default=uuid.uuid1, editable=False, max_length=36)
    rc_group_name = models.CharField(_(u"融云群组名"), max_length=50, null=True, editable=True)
    longitude = models.DecimalField(_(u"经度"), max_digits=9, decimal_places=6, null=True, blank=False, default=31.184111)
    latitude = models.DecimalField(_(u"纬度"), max_digits=9, decimal_places=6, null=True, blank=False, default=121.58611)
    active = models.SmallIntegerField(_(u"状态"), choices=ACTIVE_TYPE, db_index=True, null=False, editable=False, default=1)
    device_operation_password = models.CharField(_(u"操作密码"), max_length=4, editable=True, null=True)
    map_title = models.CharField(_(u"地图标题"), max_length=30, null=True, blank=True, db_index=True)
    

2.下面是导入excel文件返回字典数据,用字典来接收数据是因为"Unit"的name属性为unique,所有用name作为key值去重

# coding: utf-8
import xlrd
import uuid
import random

def excel_table_by_name(file_excel=‘/home/kevin/下载/danwei_11.xlsx‘,
                        col_name_index=0, by_name=u‘Sheet1‘):
    """
        根据名称获取Excel表格中的数据
        参数: file_excel:Excel文件路径
             col_name_index:表头列名所在行的所以
             by_name:Sheet1名称
    """
    data = xlrd.open_workbook(file_excel)
    table = data.sheet_by_name(by_name)
    n_rows = table.nrows   # 行数
    col_names = table.row_values(col_name_index)  # 某一行数据
    row_dict = {}
    for row_num in range(1, n_rows):
        row = table.row_values(row_num)
        row_dict[row[0]] = row[1]
    return row_dict

def import_unit_batch():
    data = excel_table_by_name()
    from ..models.model_unit import Unit
    # from ..models.model_appname import AppName
    # from ..models.model_monitor import Monitor, BRANCH_TYPE_DICT
    unit_list = []
    # app_names = AppName.objects.filter(id__in=(12, 13))
    for k, v in data.items():
        longitude_latitude = v.split(‘,‘)
        unit_obj = Unit.objects.filter(name=k)
        if not unit_obj:
            new_unit = Unit(
                contactnumber=‘13‘ + str("%09d" % random.randint(0, 999999999)),
                longitude=longitude_latitude[1],
                latitude=longitude_latitude[0],
                rc_group_id=uuid.uuid1(),
                rc_group_name=k,
                active=1,
                device_operation_password=‘1718‘,
                name=k,
                map_title=‘智慧用电及电气安全大数据中心‘,
            )
            unit_list.append(new_unit)
    Unit.objects.bulk_create(unit_list)

excel 的格式为

3.批量更新对象,以下代码相当于 update unit where id >= 703;

>>> from mysite.manage.models.model_unit import Unit
>>> units = Unit.objects.filter(id__gte=703)
>>> units.update(map_title=‘更改地图标题‘)
983L
>>> units[0].map_title
u‘\u66f4\u6539\u5730\u56fe\u6807\u9898‘
>>> print u‘\u66f4\u6539\u5730\u56fe\u6807\u9898‘
更改地图标题
>>> 

4.批量删除对象,以下代码相当于 delete from unit where id >= 703;

>>> from mysite.manage.models.model_unit import Unit
>>> units = Unit.objects.filter(id__gte=703)
>>> len(units)
983
>>> units.delete()
>>> units
[]
>>> 
时间: 2024-10-29 00:18:50

django 导入Excel文件 ORM 批量操作的相关文章

Yii 2 —— 导入Excel文件

导入Excel文件需要两个扩展:PHPOffice/PHPExcel和moonlandsoft/yii2-phpexcel,这两个扩展中,PHPOffice/PHPExcel是基础的Excel文件接口,moonlandsoft/yii2-phpexcel提供了导入和导出的功能. 引入PHPOffice/PHPExcel 官网地址: https://github.com/PHPOffice/PHPExcel 下载后解压,拷贝到vendor/PHPExcel目录下,整体目录结构如下: PHPExce

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

思路: 1.首先,页面前端,上传附件,提交给后台,并带一个随机性的参数(可以用时间戳): 2.后端接收附件,做一系列的逻辑处理,无误后,将对应的文件存储在上传的目录下: 3.然后前端,上传附件成功后,进行请求后端,读取数据,后端接口对应将附件数据读取出来,前端进行显示(ajax请求): 4.前端展示数据,用户对数据检测无误,点击保存(ajax请求后端保存代码的接口),当然也可以有选择性的选择某些数据记录进行保存,楼主这里做的是全部保存(后端处理接口,自动过滤重复数据): 5.拿到对应的所需有用数

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

1.下载phpexcel,将压缩包中的classes复制到protected/extensions下并修改为PHPExcel. 2.修改YII配置文件config/main.php [php] view plaincopy 'import'=>array( 'application.extensions.PHPExcel.PHPExcel', ), (以下处理PHPExcel autoload和YII autoload相冲突的方法任选其一,推荐第4种,最符合YII标准) 3.1.修改PHPExc

Java POI导入Excel文件

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

Java导入Excel文件

package com.cme.core; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.Ar

excel数据 入库mysql 和 mysql数据 导入excel文件

1.excel数据入库mysql 首先准备excel文件, 标红的地方需要留意,一个是字段名所在行,一个表名对应页: 然后私用mysql工具 navicat, 选择数据库,然后导入文件, 选中相应execl文件,即可导入. 栏位名行  对应excel文件中,字段名所在的行. 第一个数据行  对应excel文件中,第一行数据所在的行. ----------------------------------------------------------------------------------

jeecg3.5中的导入excel文件的使用及完善

jeecg中导入导出excel文件使用了jeecg团队自己开发的一个easypoi库,所以使用起来非常简单,以我项目中导入黑名单列表功能为例: 在实体中增加注解 先增加类的注解: @ExcelTarget("blackListEntity") public class BlackListEntity implements java.io.Serializable { 再增加字段注解: /**手机号码*/ @Excel(name="手机号码") private Lon

C# 各种导入 Excel 文件的数据的方法总结

在导入之前都需要将上传的文件保存到服务器,所以避免重复的写这些代码,先贴出上传文件并保存到服务器指定路径的代码. protected void btnImport_Click(object sender, EventArgs e) { Random random = new Random(); ImportClass Import = new ImportClass(); //保存文件的虚拟路径 string path = "Import/"; //获取选择的文件名 string fi

利用kettle组件导入excel文件到数据库

1.     实现目标 把excel文件内容导入到目标表中:然后用java调用kettle的转换.excel文件的内容仅仅有两列,示比例如以下: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbmV3ZWFzdHN1bg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" > 数据库表的结构例如以下: watermark/2/text/aHR0