python Django大量匯入資料

來源:互聯網
上載者:User
前言:

這期間有研究了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大量匯入資料有所協助。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.