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中的hypot()方法使用简介
May 18 Python
详谈Python基础之内置函数和递归
Jun 21 Python
Anaconda多环境多版本python配置操作方法
Sep 12 Python
浅谈Python的list中的选取范围
Nov 12 Python
PyQt弹出式对话框的常用方法及标准按钮类型
Feb 27 Python
python 整数越界问题详解
Jun 27 Python
Django2 连接MySQL及model测试实例分析
Dec 10 Python
pyftplib中文乱码问题解决方案
Jan 11 Python
python上传时包含boundary时的解决方法
Apr 08 Python
python编写一个会算账的脚本的示例代码
Jun 02 Python
Python pytesseract验证码识别库用法解析
Jun 29 Python
Python经常使用的一些内置函数
Apr 11 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中__destruct与register_shutdown_function执行的先后顺序问题
2014/10/17 PHP
JS实现带关闭功能的阿里妈妈网站顶部滑出banner工具条代码
2015/09/17 Javascript
关于ES6的六个小特性(二)
2017/02/20 Javascript
vue.js 实现点击按钮动态添加li的方法
2018/09/07 Javascript
微信小程序通过js实现瀑布流布局详解
2019/08/28 Javascript
原生JS与JQ获取元素的区别详解
2020/02/13 Javascript
js实现简易计算器小功能
2020/11/18 Javascript
[00:30]塑造者的传承礼包-戴泽“暗影之焰”套装展示视频
2014/04/04 DOTA
详解使用python的logging模块在stdout输出的两种方法
2017/05/17 Python
Python2.7+pytesser实现简单验证码的识别方法
2017/12/29 Python
pyqt实现.ui文件批量转换为对应.py文件脚本
2019/06/19 Python
Win10环境python3.7安装dlib模块趟过的坑
2019/08/01 Python
python匿名函数lambda原理及实例解析
2020/02/07 Python
Python3实现打印任意宽度的菱形代码
2020/04/12 Python
Python实现仿射密码的思路详解
2020/04/23 Python
Python实现发票自动校核微信机器人的方法
2020/05/22 Python
通过python-pptx模块操作ppt文件的方法
2020/12/26 Python
pycharm 实现复制一行的快捷键
2021/01/15 Python
CSS3使用transition实现的鼠标悬停淡入淡出
2015/01/09 HTML / CSS
美国豪华时尚女性精品店:Kirna Zabête
2018/01/11 全球购物
加拿大休闲和工业服装和鞋类零售商:L’Équipeur
2018/01/12 全球购物
Lyle & Scott苏格兰金鹰官网:英国皇室御用品牌
2018/05/09 全球购物
乌克兰珠宝大卖场:Zlato.ua
2020/09/27 全球购物
如何通过jdbc调用存储过程
2012/04/19 面试题
涉外文秘个人求职的自我评价
2013/10/07 职场文书
餐厅总经理岗位职责
2013/12/31 职场文书
公司庆典活动邀请函
2014/01/09 职场文书
中学运动会广播稿
2014/01/19 职场文书
大学生学年自我鉴定
2014/02/10 职场文书
爽歪歪广告词
2014/03/20 职场文书
党员公开承诺书和承诺事项
2014/03/25 职场文书
初中英语课后反思
2014/04/25 职场文书
2014党员自我评议表范文
2014/09/20 职场文书
Python WSGI 规范简介
2021/04/11 Python
pandas中对文本类型数据的处理小结
2021/11/01 Python
pt-archiver 主键自增
2022/04/26 MySQL