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实现挑选出来100以内的质数
Mar 24 Python
使用SAE部署Python运行环境的教程
May 05 Python
python常见数制转换实例分析
May 09 Python
python中sys.argv函数精简概括
Jul 08 Python
对Python 窗体(tkinter)文本编辑器(Text)详解
Oct 11 Python
详解重置Django migration的常见方式
Feb 15 Python
浅析pandas 数据结构中的DataFrame
Oct 12 Python
django框架基于queryset和双下划线的跨表查询操作详解
Dec 11 Python
new_zeros() pytorch版本的转换方式
Feb 18 Python
Pandas对DataFrame单列/多列进行运算(map, apply, transform, agg)
Jun 14 Python
python动态规划算法实例详解
Nov 22 Python
Pytest中conftest.py的用法
Jun 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
PHP扩展开发入门教程
2015/02/26 PHP
php curl 模拟登录并获取数据实例详解
2016/12/22 PHP
PDO::inTransaction讲解
2019/01/28 PHP
PHP7匿名类的用法示例
2019/04/05 PHP
为JavaScript类型增加方法的实现代码(增加功能)
2011/12/29 Javascript
纯js分页代码(简洁实用)
2013/11/05 Javascript
javascript引用赋值(地址传值)用法实例
2015/01/13 Javascript
JavaScript将Web页面内容导出到Word及Excel的方法
2015/02/13 Javascript
javascript的BOM
2016/05/03 Javascript
浅谈jQuery中hide和fadeOut的区别 show和fadeIn的区别
2016/08/18 Javascript
javascript 内置对象及常见API详细介绍
2016/11/01 Javascript
使用ionic切换页面卡顿的解决方法
2016/12/16 Javascript
JavaScript数组迭代方法
2017/03/03 Javascript
nodejs个人博客开发第三步 载入页面
2017/04/12 NodeJs
如何构建 vue-ssr 项目的方法步骤
2020/08/04 Javascript
javascript实现一款好看的秒表计时器
2020/09/05 Javascript
[07:57]DOTA2热力大趴狂欢夜 广州站活动回顾
2013/11/27 DOTA
[57:50]DOTA2上海特级锦标赛主赛事日 - 4 胜者组决赛Secret VS Liquid第二局
2016/03/05 DOTA
Python中用Ctrl+C终止多线程程序的问题解决
2013/03/30 Python
Python入门篇之正则表达式
2014/10/20 Python
利用Python的Twisted框架实现webshell密码扫描器的教程
2015/04/16 Python
解决pandas 作图无法显示中文的问题
2018/05/24 Python
python读取Excel实例详解
2018/08/17 Python
widows下安装pycurl并利用pycurl请求https地址的方法
2018/10/15 Python
python多进程控制学习小结
2018/10/31 Python
PythonWeb项目Django部署在Ubuntu18.04腾讯云主机上
2019/04/01 Python
Django集成搜索引擎Elasticserach的方法示例
2019/06/04 Python
详解python内置常用高阶函数(列出了5个常用的)
2020/02/21 Python
Django自定义全局403、404、500错误页面的示例代码
2020/03/08 Python
基于python实现对文件进行切分行
2020/04/26 Python
化工机械应届生求职信
2013/11/04 职场文书
质量工程师岗位职责
2013/11/16 职场文书
高中生活自我鉴定
2014/01/18 职场文书
小学校长竞聘演讲稿
2014/05/16 职场文书
2014年幼儿园班级工作总结
2014/12/17 职场文书
Python turtle实现贪吃蛇游戏
2021/06/18 Python