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执行外部程序的常用方法小结
Mar 21 Python
Python中的ceil()方法使用教程
May 14 Python
Python编程中对文件和存储器的读写示例
Jan 25 Python
python文件的md5加密方法
Apr 06 Python
Python获取SQLite查询结果表列名的方法
Jun 21 Python
python网络爬虫学习笔记(1)
Apr 09 Python
python函数与方法的区别总结
Jun 23 Python
python字符串切割:str.split()与re.split()的对比分析
Jul 16 Python
python多进程重复加载的解决方式
Dec 13 Python
python自动统计zabbix系统监控覆盖率的示例代码
Apr 03 Python
怎么用Python识别手势数字
Jun 07 Python
pycharm代码删除恢复的方法
Jun 26 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动态创建Flash动画
2006/10/09 PHP
PHP备份/还原MySQL数据库的代码
2011/01/06 PHP
laravel 5 实现模板主题功能(续)
2015/03/02 PHP
php mailer类调用远程SMTP服务器发送邮件实现方法
2016/03/04 PHP
学习ExtJS TextField常用方法
2009/10/07 Javascript
JS日期和时间选择控件升级版(自写)
2013/08/02 Javascript
jQuery的bind()方法使用详解
2015/07/15 Javascript
jquery+css3实现会动的小圆圈效果
2016/01/27 Javascript
解析Node.js异常处理中domain模块的使用方法
2016/02/16 Javascript
又一枚精彩的弹幕效果jQuery实现
2016/07/25 Javascript
浅谈Javascript中的Label语句
2016/12/14 Javascript
浅谈js中用$(#ID)来作为选择器的问题(id重复的时候)
2017/02/14 Javascript
详解Javascript几种跨域方式总结
2017/02/27 Javascript
vue-cli单页应用改成多页应用配置详解
2017/07/14 Javascript
jQuery图片查看插件Magnify开发详解
2017/12/25 jQuery
JS中Object对象的原型概念基础
2018/01/29 Javascript
Vue 2.0 中依赖注入 provide/inject组合实战
2019/06/20 Javascript
Vue按时间段查询数据组件使用详解
2020/08/21 Javascript
[01:00:10]完美世界DOTA2联赛PWL S2 FTD vs Inki 第二场 11.21
2020/11/24 DOTA
Python random模块常用方法
2014/11/03 Python
一条命令解决mac版本python IDLE不能输入中文问题
2018/05/15 Python
Python实现的爬取百度贴吧图片功能完整示例
2019/05/10 Python
Python空间数据处理之GDAL读写遥感图像
2019/08/01 Python
python实现的自动发送消息功能详解
2019/08/15 Python
Python Matplotlib简易教程(小白教程)
2020/07/28 Python
Pytest测试框架基本使用方法详解
2020/11/25 Python
澳大利亚波西米亚风连衣裙在线商店:Fortunate One
2019/04/01 全球购物
美国肌肉和力量商店:Muscle & Strength
2019/06/22 全球购物
毕业自荐书
2013/12/09 职场文书
计算机专业毕业生自我鉴定
2014/01/16 职场文书
文化宣传方案
2014/03/13 职场文书
有关保护环境的宣传标语100条
2019/08/07 职场文书
小学生节约用水倡议书
2019/08/12 职场文书
如何在CocosCreator里画个炫酷的雷达图
2021/04/16 Javascript
postgreSQL数据库基础知识介绍
2022/04/12 PostgreSQL
Elasticsearch 索引操作和增删改查
2022/04/19 Python