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通过urllib2爬网页上种子下载示例
Feb 24 Python
详解Python中的循环语句的用法
Apr 09 Python
详解Python程序与服务器连接的WSGI接口
Apr 29 Python
windows及linux环境下永久修改pip镜像源的方法
Nov 28 Python
Python在图片中添加文字的两种方法
Apr 29 Python
python爬取亚马逊书籍信息代码分享
Dec 09 Python
使用python 打开文件并做匹配处理的实例
Jan 02 Python
Python进程,多进程,获取进程id,给子进程传递参数操作示例
Oct 11 Python
通过python调用adb命令对App进行性能测试方式
Apr 23 Python
解决在keras中使用model.save()函数保存模型失败的问题
May 21 Python
Python+OpenCV图像处理—— 色彩空间转换
Oct 22 Python
python 多态 协议 鸭子类型详解
Nov 27 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
德生PL330的评价与改造
2021/03/02 无线电
php巧获服务器端信息
2006/12/06 PHP
PHP分页函数代码(简单实用型)
2010/12/02 PHP
PHP面向对象——访问修饰符介绍
2012/11/08 PHP
PHP封装的一个支持HTML、JS、PHP重定向的多功能跳转函数
2014/06/19 PHP
Laravel 5框架学习之表单验证
2015/04/08 PHP
Smarty简单生成表单元素的方法示例
2016/05/23 PHP
TP3.2批量上传文件或图片 同名冲突问题的解决方法
2017/08/01 PHP
php获取ajax的headers方法与内容实例
2017/12/27 PHP
php传值和传引用的区别点总结
2019/11/19 PHP
用javascript控制iframe滚动的代码
2007/04/10 Javascript
jquery prop的使用介绍及与attr的区别
2013/12/19 Javascript
javascript弹出页面回传值的方法
2015/01/28 Javascript
angularjs使用directive实现分页组件的示例
2017/02/07 Javascript
nodejs搭建本地服务器轻松解决跨域问题
2018/03/21 NodeJs
解决vue-cli单页面手机应用input点击手机端虚拟键盘弹出盖住input问题
2018/08/25 Javascript
使用preload预加载页面资源时注意事项
2020/02/03 Javascript
jQuery AJAX应用实例总结
2020/05/19 jQuery
手动实现vue2.0的双向数据绑定原理详解
2021/02/06 Vue.js
python的dict,set,list,tuple应用详解
2014/07/24 Python
python超简单解决约瑟夫环问题
2015/05/12 Python
Python FTP两个文件夹间的同步实例代码
2018/05/25 Python
python脚本监控Tomcat服务器的方法
2018/07/06 Python
Flask之请求钩子的实现
2018/12/23 Python
深入了解python列表(LIST)
2020/06/08 Python
Keras模型转成tensorflow的.pb操作
2020/07/06 Python
python利用文件时间批量重命名照片和视频
2021/02/09 Python
Pat McGrath Labs官网:世界上最有影响力的化妆师推出的彩妆品牌
2018/01/07 全球购物
Ariat官网:美国马靴和服装品牌
2019/12/16 全球购物
大学生蛋糕店创业计划书
2014/01/13 职场文书
诚信考试标语
2014/06/24 职场文书
会计岗位职责
2015/02/03 职场文书
锅炉工岗位职责
2015/02/13 职场文书
单位综合评价意见
2015/06/05 职场文书
史上最全书信经典范文大全(建议收藏)
2019/07/10 职场文书
Python如何使用logging为Flask增加logid
2021/03/30 Python