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获取糗百图片代码实例
Dec 18 Python
python文件读写操作与linux shell变量命令交互执行的方法
Jan 14 Python
以windows service方式运行Python程序的方法
Jun 03 Python
深入解析Python编程中super关键字的用法
Jun 24 Python
基于numpy.random.randn()与rand()的区别详解
Apr 17 Python
Python学习笔记之错误和异常及访问错误消息详解
Aug 08 Python
使用Python完成15位18位身份证的互转功能
Nov 06 Python
Pycharm连接gitlab实现过程图解
Sep 01 Python
基于python实现坦克大战游戏
Oct 27 Python
Python从MySQL数据库中面抽取试题,生成试卷
Jan 14 Python
python基于tkinter制作m3u8视频下载工具
Apr 24 Python
利用python做数据拟合详情
Nov 17 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
实现dedecms全站URL静态化改造的代码
2007/03/29 PHP
Erlang的运算符(比较运算符,数值运算符,移位运算符,逻辑运算符)
2012/07/23 PHP
thinkphp 多表 事务详解
2013/06/17 PHP
php用正则判断是否为数字的方法
2016/03/25 PHP
PHP的Yii框架中过滤器相关的使用总结
2016/03/29 PHP
php简单压缩css样式示例
2016/09/22 PHP
js实现GridView单选效果自动设置交替行、选中行、鼠标移动行背景色
2010/05/27 Javascript
jquery多浏览器捕捉回车事件代码
2010/06/22 Javascript
javascript实现确定和取消提示框效果
2015/07/10 Javascript
win7下安装配置node.js+express开发环境
2015/12/06 Javascript
confirm确认对话框的实现方法总结
2016/06/17 Javascript
AngularJS基础 ng-src 指令简单示例
2016/08/03 Javascript
如何提高数据访问速度
2016/12/26 Javascript
利用imgareaselect辅助后台实现图片上传裁剪
2017/03/02 Javascript
JS判断两个对象内容是否相等的方法示例
2017/04/10 Javascript
AngularJS封装$http.post()实例详解
2017/05/06 Javascript
Vue项目中quill-editor带样式编辑器的使用方法
2017/08/08 Javascript
JavaScript解析及序列化JSON的方法实例分析
2019/01/04 Javascript
基于vue+axios+lrz.js微信端图片压缩上传方法
2019/06/25 Javascript
Nautil 中使用双向数据绑定的实现
2019/10/02 Javascript
vue实现将一个数组内的相同数据进行合并
2019/11/07 Javascript
Vue 通过公共字段,拼接两个对象数组的实例
2019/11/07 Javascript
Python中%是什么意思?python中百分号如何使用?
2018/03/20 Python
python实现下载pop3邮件保存到本地
2018/06/19 Python
python3图片文件批量重命名处理
2019/10/31 Python
Python hmac模块使用实例解析
2019/12/24 Python
python dir函数快速掌握用法技巧
2020/12/09 Python
CSS教程:CSS3圆角属性
2009/04/02 HTML / CSS
《小小竹排画中游》教学反思
2014/02/26 职场文书
荷叶母亲教学反思
2014/04/30 职场文书
产品售后服务承诺书
2014/05/21 职场文书
秋季运动会演讲稿
2014/09/16 职场文书
2015年行政助理工作总结
2015/04/30 职场文书
2015年中学团委工作总结
2015/07/22 职场文书
Python实现生成bmp图像的方法
2021/06/13 Python
Promise静态四兄弟实现示例详解
2022/07/07 Javascript