python Django批量导入数据


Posted in Python onMarch 25, 2016

前言:

这期间有研究了Django网页制作过程中,如何将数据批量导入到数据库中.

这个过程真的是惨不忍睹,犯了很多的低级错误,这会在正文中说到的.再者导入数据用的是py脚本,脚本内容参考至自强学堂--中级教程--数据导入.

 注:本文主要介绍自己学习的经验总结,而非教程!

正文:首先说明采用Django中bulk_create()函数来实现数据批量导入功能,为什么会选择它呢?

1 bulk_create()是执行一条SQL存入多条数据,使得导入速度更快;

2 bulk_create()减少了SQL语句的数量;

       然后,我们准备需要导入的数据源,数据源格式可以是xls,csv,txt等文本文档;

       最后,编写py脚本,运行即可!

py脚本如下:

#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 django
import datetime


if django.VERSION >= (1, 7):#自动判断版本
  django.setup()

from keywork.models import LOrder

f = open('cs.csv')
WorkList = []
next(f) #将文件标记移到下一行
for line in f:
  parts = line.replace('"','') #将字典中的"替换空
  parts = parts.split(';') #按;对字符串进行切片
  WorkList.append(LOrder(serv_id=parts[0], serv_state_name=parts[1], acct_code=parts[2], acct_name=parts[3], acc_nbr=parts[4], user_name=parts[5],
              frod_addr=parts[6], mkt_chnl_name=parts[7],mkt_grid_name=parts[8], com_chnl_name=parts[9],com_grid_name=parts[10],
              product_name=parts[11],access_name=parts[12], completed_time=parts[13],remove_data=parts[14], service_offer_name=parts[15],
              org_name=parts[16], staff_name=parts[17],staff_code=parts[18], handle_time=parts[19],finish_time=parts[20],
              prod_offer_name=parts[21],eff_date=parts[22], exp_date=parts[23],main_flag=parts[24], party_name=parts[25]
              )
          )
f.close() 
LOrder.objects.bulk_create(WorkList)

根据上面py脚本源代码主要来说说自己学习过程中遇见的问题

问题1:需要导入的数据源中其第一行一般是字段名,从第二行开始才是数据,所以在脚本利用next(f)将文本标记移到第二行进行操作,不然会出现问题,比如字段名一般为英文,默认是字符串格式化,脚本执行就会遇见ValidationError:YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ]这种models数据格式与导入数据格式不相符合的错误!

问题2:注意parts = parts.split(';') #按;对字符串进行切片该语句,因为我们导入数据每一行中的每列数据之间有间隔符,例如csv中逗号,xls中空格等各种文本默认间隔符号,split函数使用实例如下:

以下实例展示了split()函数的使用方法: 

#!/usr/bin/python

str = "Line1-abcdef \nLine2-abc \nLine4-abcd";
print str.split( );
print str.split(' ', 1 );

以上实例输出结果如下: 

['Line1-abcdef', 'Line2-abc', 'Line4-abcd']
['Line1-abcdef', '\nLine2-abc \nLine4-abcd']
问题3:如果导入数据源超过10M,然后数据库默认最大10M,那么上面脚本运行不会成功.以mysql为例,若导入数据大小超过数据设置,那么会报2006 go away错误,需要在mysql中的my.ini中的[mysqld]下加入下列语句:

max_allowed_packet=300M --最大允许包大小300M
wait_timeout=200000  --连接时间200000s
interactive_timeout = 200000 --断开时间200000s

以上就是本文的全部内容,希望对大家学习python批量导入数据有所帮助。

Python 相关文章推荐
python通过正则查找微博@(at)用户的方法
Mar 13 Python
python插入数据到列表的方法
Apr 30 Python
python任务调度实例分析
May 19 Python
Python线程创建和终止实例代码
Jan 20 Python
对numpy的array和python中自带的list之间相互转化详解
Apr 13 Python
使用pip发布Python程序的方法步骤
Oct 11 Python
对Python中DataFrame选择某列值为XX的行实例详解
Jan 29 Python
Python 实现取多维数组第n维的前几位
Nov 26 Python
python操作cfg配置文件方式
Dec 22 Python
Python基于pyecharts实现关联图绘制
Mar 27 Python
python语言是免费还是收费的?
Jun 15 Python
python井字棋游戏实现人机对战
Apr 28 Python
python Django批量导入不重复数据
Mar 25 #Python
用Python实现斐波那契(Fibonacci)函数
Mar 25 #Python
Python基础教程之正则表达式基本语法以及re模块
Mar 25 #Python
详解Python使用simplejson模块解析JSON的方法
Mar 24 #Python
解决Python出现_warn_unsafe_extraction问题的方法
Mar 24 #Python
python 回调函数和回调方法的实现分析
Mar 23 #Python
python 时间戳与格式化时间的转化实现代码
Mar 23 #Python
You might like
PHP 输出缓冲控制(Output Control)详解
2016/08/25 PHP
PHP中常用的魔术方法
2017/04/28 PHP
Javascript 布尔型分析
2008/12/22 Javascript
微博@符号的用户名提示效果。(想@到谁?)
2010/11/05 Javascript
在vs2010中调试javascript代码方法
2011/02/11 Javascript
Angularjs制作简单的路由功能demo
2015/04/14 Javascript
JavaScript数组去重的3种方法和代码实例
2015/07/01 Javascript
JS 清除字符串数组中,重复元素的实现方法
2016/05/24 Javascript
详解微信小程序——自定义圆形进度条
2016/12/29 Javascript
JS实现新建文件夹功能
2017/06/17 Javascript
浅谈Node.js CVE-2017-14849 漏洞分析(详细步骤)
2017/11/10 Javascript
Vue中自定义全局组件的实现方法
2017/12/08 Javascript
Angular刷新当前页面的实现方法
2018/11/21 Javascript
react配置antd按需加载的使用
2019/02/11 Javascript
vue-cli3+typescript初体验小结
2019/02/28 Javascript
Nodejs中使用puppeteer控制浏览器中视频播放功能
2019/08/26 NodeJs
vue页面更新patch的实现示例
2020/03/25 Javascript
Vue3为什么这么快
2020/09/23 Javascript
[33:39]DOTA2上海特级锦标赛C组小组赛#2 LGD VS Newbee第二局
2016/02/27 DOTA
简单讲解Python中的闭包
2015/08/11 Python
python基础之包的导入和__init__.py的介绍
2018/01/08 Python
使用Python爬了4400条淘宝商品数据,竟发现了这些“潜规则”
2018/03/23 Python
Python3.5.3下配置opencv3.2.0的操作方法
2018/04/02 Python
深入理解Python异常处理的哲学
2019/02/01 Python
这可能是最好玩的python GUI入门实例(推荐)
2019/07/19 Python
Python tkinter三种布局实例详解
2020/01/06 Python
Pytorch数据拼接与拆分操作实现图解
2020/04/30 Python
Tensorflow使用Anaconda、pycharm安装记录
2020/07/29 Python
html5绘制时钟动画
2014/12/15 HTML / CSS
联想德国官网:Lenovo Germany
2018/07/04 全球购物
教师个人读书活动总结
2014/07/08 职场文书
学校交通安全责任书
2014/08/25 职场文书
同学聚会通知短信
2015/04/20 职场文书
2015年幼儿园学前班工作总结
2015/05/18 职场文书
2016新教师岗前培训心得体会
2016/01/08 职场文书
Python Matplotlib绘制条形图的全过程
2021/10/24 Python