国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

python Django批量導入數據

2020-01-04 17:34:50
字體:
來源:轉載
供稿:網友
這篇文章主要為大家詳細介紹了python Django批量導入數據的相關資料感興趣的小伙伴們可以參考一下
 

前言:

這期間有研究了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 djangodjango.setup()否則會拋出錯誤 django.core.exceptions.AppRegistryNotReady: Models aren't loaded yet.'''import djangoimport datetimeif django.VERSION >= (1, 7):#自動判斷版本  django.setup()from keywork.models import LOrderf = 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/pythonstr = "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 --最大允許包大小300Mwait_timeout=200000  --連接時間200000sinteractive_timeout = 200000 --斷開時間200000s

以上就是本文的全部內容,希望對大家學習python批量導入數據有所幫助。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 镇康县| 成都市| 元阳县| 大安市| 永胜县| 酉阳| 琼海市| 繁峙县| 新野县| 剑川县| 邻水| 资源县| 泾源县| 安平县| 凌源市| 义乌市| 平顺县| 金平| 博白县| 辽宁省| 南阳市| 大石桥市| 澄江县| 五家渠市| 会昌县| 清水县| 五寨县| 宁远县| 德州市| 新绛县| 章丘市| 达尔| 合川市| 大同县| 正蓝旗| 白朗县| 开原市| 库尔勒市| 张家川| 安西县| 蓬溪县|