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 相关文章推荐
解决python2.7 查询mysql时出现中文乱码
Oct 09 Python
python3中int(整型)的使用教程
Mar 23 Python
Python字符串处理实现单词反转
Jun 14 Python
Python正则表达式非贪婪、多行匹配功能示例
Aug 08 Python
Python生成8位随机字符串的方法分析
Dec 05 Python
解决Python2.7读写文件中的中文乱码问题
Apr 12 Python
python 创建一个空dataframe 然后添加行数据的实例
Jun 07 Python
详解Python3中的迭代器和生成器及其区别
Oct 09 Python
Python读取系统文件夹内所有文件并统计数量的方法
Oct 23 Python
对PyQt5中的菜单栏和工具栏实例详解
Jun 20 Python
基于MATLAB和Python实现MFCC特征参数提取
Aug 13 Python
详解pandas.DataFrame.plot() 画图函数
Jun 14 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版(1)
2006/10/09 PHP
PHP二进制与字符串之间的相互转换教程
2016/10/14 PHP
PHP实现ASCII码与字符串相互转换的方法
2017/04/29 PHP
javascript 函数调用规则
2009/08/26 Javascript
JavaScript计算字符串中每个字符出现次数的小例子
2013/07/02 Javascript
jquery图片不完全按比例自动缩小的简单代码
2013/07/29 Javascript
jQuery操作input值的各种方法总结
2013/11/21 Javascript
jquery实现保存已选用户
2014/07/21 Javascript
为JS扩展Array.prototype.indexOf引发的问题及解决办法
2015/01/21 Javascript
JavaScript实现在标题栏上显示当前日期的方法
2015/03/19 Javascript
JavaScript中实现map功能代码分享
2015/06/11 Javascript
Vue.js组件tab实现选项卡切换
2020/03/23 Javascript
jQuery动态产生select option下拉列表
2017/03/15 Javascript
Vue的移动端多图上传插件vue-easy-uploader的示例代码
2017/11/27 Javascript
微信小程序实现运动步数排行功能(可删除)
2018/07/05 Javascript
用Node提供静态文件服务的方法
2018/07/06 Javascript
vue如何进行动画的封装
2018/09/26 Javascript
JS实现的tab页切换效果完整示例
2018/12/18 Javascript
vue input实现点击按钮文字增删功能示例
2019/01/29 Javascript
vuex实现数据状态持久化
2019/11/11 Javascript
JS控制下拉列表左右选择实例代码
2020/05/08 Javascript
[02:53]DOTA2英雄基础教程 山岭巨人小小
2013/12/09 DOTA
Python压缩和解压缩zip文件
2015/02/14 Python
Python爬虫之xlml解析库(全面了解)
2017/08/08 Python
Python输入二维数组方法
2018/04/13 Python
python3爬虫之设计签名小程序
2018/06/19 Python
Python装饰器语法糖
2019/01/02 Python
基于python判断目录或者文件代码实例
2019/11/29 Python
HTML5 File API改善网页上传功能
2009/08/19 HTML / CSS
学习型党组织建设经验材料
2014/05/26 职场文书
求职信范文怎么写
2015/03/19 职场文书
2015年仓库管理工作总结
2015/05/25 职场文书
python自然语言处理之字典树知识总结
2021/04/25 Python
世界各国短波电台对东亚播送时间频率表(SW)
2021/06/28 无线电
python编程项目中线上问题排查与解决
2021/11/01 Python
漫画「古见同学有交流障碍症」第25卷封面公开
2022/03/21 日漫