先贴原来的导入数据代码:

8 import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "www.settings") '''
Django 版本大于等于1.7的时候,需要加上下面两句
import django
django.setup()
否则会抛出错误 django.core.exceptions.AppRegistryNotReady: Models aren't loaded yet.
'''
import djangoif django.VERSION >= (1, 7):#自动判断版本
    django.setup()from arrears.models import D072Qf
import xlrd #excel读工具
from datetime import datetime
from xlrd import xldate_as_tuple
import time
import random  time1 = time.time()
#data= xlrd.open_workbook('11.xlsx') 打开文件
with xlrd.open_workbook('11.xlsx') as data:print u"读取文件结束,开始导入!"time2 = time.time()table = data.sheet_by_index(0) #获取工作表time3 = time.time()n=1x = y = z = 0WorkList = []for line in range(n,table.nrows):#nrows = table.nrows #行数 ncols = table.ncols #列数 print sh.row_values(rownum)row = table.row_values(line)if row: #查看行值是否为空for i in [0,1,2,4,28,30,32]:if type(row[i]) == float:row[i] = int(row[i])if D072Qf.objects.filter(acct_month = row[0],serv_id=row[1]).exists():#判断该行值是否在数据库中重复x = x + 1 #重复值计数else:WorkList.append(D072Qf(acct_month=row[0],serv_id=row[1],acc_nbr=row[2],user_name=row[3],acct_code=row[4],acct_name=row[5],product_name=row[6],current_charge=row[7],one_charge=row[8],two_charge=row[9],three_charge=row[10],four_charge=row[11],five_charge=row[12],six_charge=row[13],seven_charge=row[14],eight_charge=row[15],nine_charge=row[16],ten_charge=row[17],eleven_charge=row[18],twelve_charge=row[19],oneyear_charge=row[20],threeyear_charge=row[21],upthreeyear_charge=row[22],all_qf=row[23],morethree_qf=row[24],aging=row[25],serv_state_name=row[26],mkt_chnl_name=row[27],mkt_chnl_id=row[28],mkt_region_name=row[29],mkt_region_id=row[30],mkt_grid_name=row[31],mkt_grid_id=row[32],prod_addr=row[33]))           y = y + 1 #非重复计数                else:z = z + 1     #空行值计数n = n + 1if n % 9999 == 0:D072Qf.objects.bulk_create(WorkList)                     WorkList = []time.sleep(random.random()) #让Cpu随机休息0 <= n < 1.0 sprint "导入成功一次!"print '数据导入成功,导入'+str(y)+'条,重复'+str(x)+'条,有'+str(z)+'行为空!'     time4 = time.time()print "读取文件耗时"+str(time2-time1)+"秒,导入数据耗时"+str(time4-time3)+"秒!"

这条代码目前未全部将十几万行数据全部导入数据库中,只花了1个小时把5万行数据导入其中后,后面越来越慢,主要慢在excel表到了7万行数据左右后,读取excel中数据很慢了,总体来说影响导入速度有几个原因:

1、一直以来采用xlrd导入xls格式文件,如果文件有十几万行,只是读取文件就会花200秒,若换成csv则几乎不花时间

2、代码中这行语句也会影响速度,特别当数据库中数据很大时:if D072Qf.objects.filter(acct_month = row[0],serv_id=row[1]).exists():#判断该行值是否在数据库中重复

3、若一次性将字典添加十几万行数据,就windows的cpu而已是遭受不住的!所以建议1万条数据导入一次后,清空列表

改善后的代码:

优化部分:采用csv格式;取消掉检查重复数据语句;每5万导入一次数据

#coding:utf-8 import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "www.settings") '''
Django 版本大于等于1.7的时候,需要加上下面两句
import django
django.setup()
否则会抛出错误 django.core.exceptions.AppRegistryNotReady: Models aren't loaded yet.
'''
import djangoif django.VERSION >= (1, 7):#自动判断版本
    django.setup()from arrears.models import D072Qf
import time
import random
time1 = time.time()
f = open('11.csv')
print u"读取文件结束,开始导入!"
time2 = time.time()
WorkList = []
next(f) #将文件标记移到下一行
y = 0
n = 1
for line in f:row = line.replace('"','') #将字典中的"替换空row = row.split(';') #按;对字符串进行切片y = y + 1WorkList.append(D072Qf(acct_month=row[0],serv_id=row[1],acc_nbr=row[2],user_name=row[3],acct_code=row[4],acct_name=row[5],product_name=row[6],current_charge=row[7],one_charge=row[8],two_charge=row[9],three_charge=row[10],four_charge=row[11],five_charge=row[12],six_charge=row[13],seven_charge=row[14],eight_charge=row[15],nine_charge=row[16],ten_charge=row[17],eleven_charge=row[18],twelve_charge=row[19],oneyear_charge=row[20],threeyear_charge=row[21],upthreeyear_charge=row[22],all_qf=row[23],morethree_qf=row[24],aging=row[25],serv_state_name=row[26],mkt_chnl_name=row[27],mkt_chnl_id=row[28],mkt_region_name=row[29],mkt_region_id=row[30],mkt_grid_name=row[31],mkt_grid_id=row[32],prod_addr=row[33]))n = n + 1if n%50000==0:print nD072Qf.objects.bulk_create(WorkList)WorkList = []time3 = time.time()print "读取文件耗时"+str(time2-time1)+"秒,导入数据耗时"+str(time3-time2)+"秒!"
time3 = time.time()
print n
D072Qf.objects.bulk_create(WorkList)
print "读取文件耗时"+str(time2-time1)+"秒,导入数据耗时"+str(time3-time2)+"秒!"
WorkList = []
print "成功导入数据"+str(y)+"条"
f.close() 

结果让人大吃一惊!!!,只耗时73秒

Python 2.7.10 (default, May 23 2015, 09:40:32) [MSC v.1500 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> ================================ RESTART ================================
>>>
读取文件结束,开始导入!
50000
读取文件耗时0.0秒,导入数据耗时34.3279998302秒!
100000
读取文件耗时0.0秒,导入数据耗时67.3599998951秒!
138400
读取文件耗时0.0秒,导入数据耗时73.4379999638秒!
成功导入数据138399条
>>> 

转载于:https://www.cnblogs.com/CQ-LQJ/p/5802371.html

[DJANGO] excel十几万行数据快速导入数据库研究相关推荐

  1. 几万条数据的excel导入到mysql_excel十几万行数据快速导入数据库研究(转,下面那个方法看看还是可以的)...

    先贴原来的导入数据代码: 8 import os os.environ.setdefault("DJANGO_SETTINGS_MODULE", "www.setting ...

  2. excel处理几十万行数据_神奇吗?仅需4步,轻松在Excel处理300万行数据

    原标题:神奇吗?仅需4步,轻松在Excel处理300万行数据 这场软件PK,是时候分出胜负了,今天就是大结局.有必杀技在手,Excel已经看到了胜利的曙光. 在99%的人眼中,Excel能处理的最大数 ...

  3. java excel批量导入数据库数据_Java实现Excel数据批量导入数据库

    Java实现Excel数据批量导入数据库 概述: 这个小工具类是工作中的一个小插曲哦,因为提数的时候需要跨数据库导数... 有的是需要从oracle导入mysql ,有的是从mysql导入oracle ...

  4. 如何将excel的数据直接导入数据库

    好久没有更新啦,小徐在新的学期的某节课中发现,自己对于简单将Excel表格中的数据导入数据库中都有些迷茫(准确说,给忘啦,有些惭愧惭愧),其他不说,下面就介绍一下如何将excel的数据直接导入数据库. ...

  5. Excel数据快速导入mysql的几个办法

    有时候需要批量插入一批数据到数据库,有很多种办法,这里我用到过三种办法: 1.通过Excel直接生成insert语句 =CONCATENATE("insert into aisee_ping ...

  6. PHP将excel文件中的数据批量导入到数据库中

    2019独角兽企业重金招聘Python工程师标准>>> 这几天在做项目时,遇到了需要批量导入数据的情况,用户将excel表格提交后,需要我们后台这边将excel表格信息中的内容全部插 ...

  7. php excel批量导入,PHP将excel文件中的数据批量导入到数据库中

    这几天在做项目时,遇到了需要批量导入数据的情况,用户将excel表格提交后,需要我们后台这边将excel表格信息中的内容全部插入到数据表中.当然,前提是用户给我们的excel表格中的信息必须和我们表中 ...

  8. 千万条数据快速导入MySQL

    千万级数据快速导入MySQL 每次导入1条 每次导入10000条 每次导入100000条 项目需要将约千万量级的信息导入表中.MySQL语句是通过Python动态生成的. 每次导入1条 每导入1条数据 ...

  9. php将excel数据导入mysql表中_【PHP】将EXCEL表中的数据轻松导入Mysql数据表

    在网络上有不较多的方法,在此介绍我已经验证的方法. 方法一.利用EXCEL表本身的功能生成SQL代码 ①.先在"phpmyadmin"中建立数据库与表(数据库:excel,数据表: ...

最新文章

  1. 金融科技公司采用大数据领先银行的三种方式
  2. ARM7+PROTEUS调试(转)
  3. Objective-C单例实现
  4. apache camel 的 split 和 aggregate
  5. 波卡链Substrate (7)Babe协议四“出块签名和验证”
  6. python 移动运算符的理解
  7. numpy的cumsum ()函数
  8. 仪器和软件通讯测试软件,软件定义的仪器-测试测量-与非网
  9. ilm 和dlm差异_《存储e周刊》第28期 信息生命周期管理之争
  10. 基坑监测日报模板_刚刚!温州瓯海突发塌陷,初步判断为临近地块地下室基坑支护桩移位...
  11. Android JNI Attempt to remove non-JNI local reference, dumping thread
  12. eclipse添加或者绑定约束文件
  13. 在LoadRunner中设置HTTP请求time-out的时间
  14. python安装换源_Python切换pip安装源的方法详解
  15. linux 内网gcc版本安装,Linux 内网环境安装gcc
  16. 水星usb无线网卡linux驱动下载,水星USB无线网卡mw150us苹果macOS系统驱动成功
  17. Zynq AXI总线
  18. 中国最顶级的一批程序员,从首富到首负!
  19. 编程小知识之 虚假唤醒(spurious wakeup)
  20. 分布式消息队列RocketMQ—个人笔记(尚硅谷老雷老师视频)

热门文章

  1. 【MyBatis笔记】10-多对一左连接查询分步查询(查询所有订单及订单对应的客户)
  2. Manjaro_xfce 安装后配置
  3. 那年学过的Web前端笔记
  4. 大厂HR:“不会数据分析,你还想干运营?”
  5. 人生苦短快用python_人生苦短,快用 Python
  6. 东风科技php,东风科技(600081)违规记录_新浪财经_新浪网
  7. pcl库python_成功安装 linux pcl (1.8.1版本) python-pcl
  8. c语言综合编程,C语言编程入门——综合练习(一)
  9. 计算机类中外合作办学情况,郑州大学2021年河南省本科一批各专业录取分数统计...
  10. HDU2019 数列有序!