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通过递归遍历出集合中所有元素的方法
Feb 25 Python
使用python遍历指定城市的一周气温
Mar 31 Python
python3使用pyqt5制作一个超简单浏览器的实例
Oct 19 Python
Python装饰器用法示例小结
Feb 11 Python
使用python获取csv文本的某行或某列数据的实例
Apr 03 Python
python自动化报告的输出用例详解
May 30 Python
基于Python实现定时自动给微信好友发送天气预报
Oct 25 Python
对python 读取线的shp文件实例详解
Dec 22 Python
python 读取dicom文件,生成info.txt和raw文件的方法
Jan 24 Python
Python 获取ftp服务器文件时间的方法
Jul 02 Python
tensorflow如何批量读取图片
Aug 29 Python
Python 解决相对路径问题:"No such file or directory"
Jun 05 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
如何将一个表单同时提交到两个地方处理
2006/10/09 PHP
YII中assets的使用示例
2014/07/31 PHP
PHP 实现判断用户是否手机访问
2015/01/21 PHP
php中文验证码实现方法
2015/06/18 PHP
PHP简单处理表单输入的特殊字符的方法
2016/02/03 PHP
PHP Oauth授权和本地加密实现方法
2016/08/12 PHP
详解PHP中websocket的使用方法
2016/09/15 PHP
php微信公众平台开发(四)回复功能开发
2016/12/06 PHP
PHP PDOStatement::fetch讲解
2019/01/31 PHP
php报错502badgateway解决方法
2019/10/11 PHP
解决laravel资源加载路径设置的问题
2019/10/14 PHP
PHP基于ip2long实现IP转换整形
2020/12/11 PHP
JavaScript 在各个浏览器中执行的耐性
2009/04/06 Javascript
js动态给table添加/删除tr的方法
2013/08/02 Javascript
基于jquery和svg实现超炫酷的动画特效
2014/12/09 Javascript
JavaScript实现点击按钮就复制当前网址
2015/12/14 Javascript
JS从数组中随机取出几个数组元素的方法
2016/08/02 Javascript
Angular中的interceptors拦截器
2017/06/25 Javascript
关于js中的鼠标事件总结
2017/07/11 Javascript
基于Vue实现平滑过渡的拖拽排序功能
2019/06/12 Javascript
Python基于回溯法子集树模板解决野人与传教士问题示例
2017/09/11 Python
Python操作MongoDB数据库的方法示例
2018/01/04 Python
TensorFlow 滑动平均的示例代码
2018/06/19 Python
Linux下python与C++使用dlib实现人脸检测
2018/06/29 Python
Python 利用内置set函数对字符串和列表进行去重的方法
2018/06/29 Python
python微信聊天机器人改进版(定时或触发抓取天气预报、励志语录等,向好友推送)
2019/04/25 Python
numpy ndarray 取出满足特定条件的某些行实例
2019/12/05 Python
Python 3.8 新功能大揭秘【新手必学】
2020/02/05 Python
Python模拟FTP文件服务器的操作方法
2020/02/18 Python
TensorFlow的reshape操作 tf.reshape的实现
2020/04/19 Python
Python 多进程、多线程效率对比
2020/11/19 Python
Otel.com:折扣酒店预订
2017/08/24 全球购物
文员个人的求职信范文
2013/09/26 职场文书
2014年手术室工作总结
2014/11/26 职场文书
幼儿园开学家长寄语(2015秋季)
2015/05/27 职场文书
创业方案:赚钱的烧烤店该怎样做?
2019/07/05 职场文书