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采集博客中上传的QQ截图文件
Jul 18 Python
跟老齐学Python之关于类的初步认识
Oct 11 Python
python写日志封装类实例
Jun 28 Python
python实现字符串连接的三种方法及其效率、适用场景详解
Jan 13 Python
Python常用特殊方法实例总结
Mar 22 Python
详解python中的线程与线程池
May 10 Python
浅谈pytorch grad_fn以及权重梯度不更新的问题
Aug 20 Python
python批量修改xml属性的实现方式
Mar 05 Python
Django静态资源部署404问题解决方案
May 11 Python
解决python执行较大excel文件openpyxl慢问题
May 15 Python
浅谈Pycharm的项目文件名是红色的原因及解决方式
Jun 01 Python
PyQt5-QDateEdit的简单使用操作
Jul 12 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 程式大小
2006/12/06 PHP
php通过字符串调用函数示例
2014/03/02 PHP
php截取指定2个字符之间字符串的方法
2015/04/15 PHP
PHP开发Apache服务器配置
2015/07/15 PHP
ThinkPHP数据操作方法总结
2015/09/28 PHP
PHP chop()函数讲解
2019/02/11 PHP
PHP call_user_func和call_user_func_array函数的简单理解与应用分析
2019/11/25 PHP
document 和 document.all 分别什么时候用
2006/06/22 Javascript
js刷新框架子页面的七种方法代码
2008/11/20 Javascript
JQuery 国际象棋棋盘 实现代码
2009/06/26 Javascript
javascript表单验证和Window详解
2014/12/11 Javascript
JavaScript删除指定子元素代码实例
2015/01/13 Javascript
js+css实现tab菜单切换效果的方法
2015/01/20 Javascript
简介JavaScript中的unshift()方法的使用
2015/06/09 Javascript
全系IE支持Bootstrap的解决方法
2015/10/19 Javascript
JavaScript获取页面中超链接数量的方法
2015/11/09 Javascript
浅谈JavaScript 标准对象
2016/06/02 Javascript
跨域请求的完美解决方法(JSONP, CORS)
2016/06/12 Javascript
详解React-Native解决键盘遮挡问题(Keyboard遮挡问题)
2017/07/13 Javascript
微信小程序实现点击文字页面跳转功能【附源码下载】
2017/12/12 Javascript
JS中call()和apply()的功能及用法实例分析
2019/06/28 Javascript
Python使用scrapy采集数据过程中放回下载过大页面的方法
2015/04/08 Python
Python基于Tkinter的HelloWorld入门实例
2015/06/17 Python
python编程实现归并排序
2017/04/14 Python
Python文本处理简单易懂方法解析
2019/12/19 Python
Pytorch 多块GPU的使用详解
2019/12/31 Python
Python字符串中删除特定字符的方法
2020/01/15 Python
Python os库常用操作代码汇总
2020/11/03 Python
浅谈Python xlwings 读取Excel文件的正确姿势
2021/02/26 Python
美国转售二手商品的电子商务平台:BLINQ
2018/12/13 全球购物
EMU Australia澳大利亚官网:澳大利亚本土雪地靴品牌
2019/07/24 全球购物
社区志愿者心得体会
2014/01/03 职场文书
写自荐信三大法宝
2014/01/24 职场文书
2015仓库保管员年终工作总结
2015/05/13 职场文书
初中运动会前导词
2015/07/20 职场文书
js中Map和Set的用法及区别实例详解
2022/02/15 Javascript