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 相关文章推荐
详解Django中的过滤器
Jul 16 Python
Python中time模块和datetime模块的用法示例
Feb 28 Python
Python2.7简单连接与操作MySQL的方法
Apr 27 Python
Python中使用bidict模块双向字典结构的奇技淫巧
Jul 12 Python
python 解压pkl文件的方法
Oct 25 Python
python实现图片识别汽车功能
Nov 30 Python
python3发送邮件需要经过代理服务器的示例代码
Jul 25 Python
Python之time模块的时间戳,时间字符串格式化与转换方法(13位时间戳)
Aug 12 Python
关于PyTorch 自动求导机制详解
Aug 18 Python
win10下python2和python3共存问题解决方法
Dec 23 Python
Python面向对象之继承原理与用法案例分析
Dec 31 Python
基于Python中random.sample()的替代方案
May 23 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
《超神学院》霸气归来, 天使彦上演维多利亚的秘密
2020/03/02 国漫
安健A254立体声随身听的分析与打磨
2021/03/02 无线电
如何在PHP中使用Oracle数据库(5)
2006/10/09 PHP
PHP中date()日期函数有关参数整理
2011/07/19 PHP
有关PHP性能优化的介绍
2013/06/20 PHP
php sybase_fetch_array使用方法
2014/04/15 PHP
PHPUnit安装及使用示例
2014/10/29 PHP
php实现网站留言板功能
2015/11/04 PHP
PHP读取大文件末尾N行的高效方法推荐
2016/06/03 PHP
js 通过html()及text()方法获取并设置p标签的显示值
2014/05/14 Javascript
点击A元素触发B元素的事件在IE8下会识别成A元素
2014/09/04 Javascript
JavaScript通过function定义对象并给对象添加toString()方法实例分析
2015/03/23 Javascript
JS实现样式清新的横排下拉菜单效果
2015/10/09 Javascript
javascript插件开发的一些感想和心得
2016/02/28 Javascript
Angular-Ui-Router+ocLazyLoad动态加载脚本示例
2017/03/02 Javascript
JavaScript如何实现监听键盘输入和鼠标监点击
2020/07/20 Javascript
vue项目实现多语言切换的思路
2020/09/17 Javascript
使用BeautifulSoup爬虫程序获取百度搜索结果的标题和url示例
2014/01/19 Python
python进阶教程之文本文件的读取和写入
2014/08/29 Python
在Python中处理列表之reverse()方法的使用教程
2015/05/21 Python
Pandas 数据处理,数据清洗详解
2018/07/10 Python
通过python3实现投票功能代码实例
2019/09/26 Python
Python进程池Pool应用实例分析
2019/11/27 Python
浅谈JupyterNotebook导出pdf解决中文的问题
2020/04/22 Python
探讨HTML5移动开发的几大特性(必看)
2015/12/30 HTML / CSS
英国最大的手表网站:The Watch Hut
2017/03/31 全球购物
Madda Fella官网:美国冒险家服装品牌
2020/01/16 全球购物
2014年最新学习全国两会精神心得
2014/03/17 职场文书
函授本科个人自我鉴定
2014/03/25 职场文书
医院院务公开实施方案
2014/05/03 职场文书
承诺书格式范文
2014/06/03 职场文书
机电一体化毕业生自荐信
2014/06/19 职场文书
三年级作文之趣事作文
2019/11/04 职场文书
python爬不同图片分别保存在不同文件夹中的实现
2021/04/02 Python
十大最帅动漫男主 碓冰拓海上榜,第一是《灌篮高手》男主角
2022/03/18 日漫
如何基于python实现单目三维重建详解
2022/06/25 Python