最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

如何在django里上傳csv文件并進(jìn)行入庫處理的方法

 更新時間:2019年01月02日 08:33:24   作者:mindg.cn  
這篇文章主要介紹了如何在django里上傳csv文件并進(jìn)行入庫處理的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

運(yùn)維平臺導(dǎo)入數(shù)據(jù)這一功能實(shí)在是太重要了,我敢說在沒有建自己的cmdb平臺前,大多數(shù)公司管理服務(wù)器信息肯定是表格,用表格最麻煩的就是有點(diǎn)更新就得每個人發(fā)一份,這樣大家信息才能統(tǒng)一,很不方便,終于有一天受不了了,搞了一個服務(wù)器信息管理平臺,那面臨的第一個問題不是說功能好或不不好,而是怎么才能把表里的數(shù)據(jù)導(dǎo)入到數(shù)據(jù)庫中,所以你說重要不重要,當(dāng)然如果你就喜歡自己手工錄入(找虐的感覺),這個咱也不能說啥,各有所好嘛,那具體如何錄的最快,這個不在我們今天的討論范圍,我只討論如何自動導(dǎo)入。

提到導(dǎo)入,那一般有二個方法,一個是在前端上傳完后存儲在服務(wù)器上的某個目錄里,然后讀取文件進(jìn)行分析處理。

另一種是上傳文件后直接讀取文件內(nèi)容而不存儲在服務(wù)器上,這二種方法都可以實(shí)現(xiàn)我們得目的,這篇主要是討論的后面這種。

上傳文件,首先我們建一個html文件,內(nèi)容代碼如下:

<form action="{% url "myapp:upload_csv" %}" method="POST" enctype="multipart/form-data" class="form-horizontal"> 
{% csrf_token %}
<div class="form-group">
  <label for="name" class="col-md-3 col-sm-3 col-xs-12 control-label">File: </label>
  <div class="col-md-8">
    <input type="file" name="csv_file" id="csv_file" required="True" class="form-control">
  </div>          
</div>
<div class="form-group">          
  <div class="col-md-3 col-sm-3 col-xs-12 col-md-offset-3" style="margin-bottom:10px;">
     <button class="btn btn-primary"> <span class="glyphicon glyphicon-upload" style="margin-right:5px;"></span>Upload </button>
  </div> 
</div>
</form>

這些都是基本的Html,只要主要enctype=”multipart/form-data”這個參數(shù)就可以,其它無特別說明。

展示如圖:

加入路由,

url(r'^upload/csv/$', views.upload_csv, name='upload_csv'),

那接下來就是處理上傳的文件并入庫了,這個代碼在views.py文件里,代碼如下:

def upload_csv(request):
	data = {}
	if "GET" == request.method:
		return render(request, "myapp/upload_csv.html", data)
  # if not GET, then proceed
	try:
		csv_file = request.FILES["csv_file"]
		if not csv_file.name.endswith('.csv'):
			messages.error(request,'File is not CSV type')
			return HttpResponseRedirect(reverse("myapp:upload_csv"))
    #if file is too large, return
		if csv_file.multiple_chunks():
			messages.error(request,"Uploaded file is too big (%.2f MB)." % (csv_file.size/(1000*1000),))
			return HttpResponseRedirect(reverse("myapp:upload_csv"))
 
		file_data = csv_file.read().decode("utf-8")		
 
		lines = file_data.split("\n")
		#loop over the lines and save them in db. If error , store as string and then display
		for line in lines:						
			fields = line.split(",")
			data_dict = {}
			data_dict["name"] = fields[0]
			data_dict["start_date_time"] = fields[1]
			data_dict["end_date_time"] = fields[2]
			data_dict["notes"] = fields[3]
			try:
				form = EventsForm(data_dict)
				if form.is_valid():
					form.save()					
				else:
					logging.getLogger("error_logger").error(form.errors.as_json())												
			except Exception as e:
				logging.getLogger("error_logger").error(repr(e))					
				pass
 
	except Exception as e:
		logging.getLogger("error_logger").error("Unable to upload file. "+repr(e))
		messages.error(request,"Unable to upload file. "+repr(e))
 
	return HttpResponseRedirect(reverse("myapp:upload_csv"))

代碼解釋:

最開始判斷如果是get請求直接渲染upload_csv.html文件,如果是post請求那么進(jìn)行分析處理,首先是檢查文件名是否是以csv結(jié)尾的,如果是就處理,不是就提示錯誤信息,再就是檢查下上傳文件的大小,其實(shí)這些檢查也還好,如果是自己整理的表導(dǎo)入基本也不用做這些檢查了,如果是有多人操作這些檢查就有必要了,然后開始循環(huán)迭代文件行,內(nèi)容是以逗號分隔,這里假設(shè)就是4列,如果你的表格列很多可以做修改,最后保存入庫,如果有錯誤就記錄錯誤信息到日志文件中。

至此我們需要的功能就完成了,雖然簡單但非常實(shí)用。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python WSGI 規(guī)范簡介

    Python WSGI 規(guī)范簡介

    這篇文章主要介紹了Python WSGI 規(guī)范的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下
    2021-04-04
  • Python統(tǒng)計中文詞頻的四種方法小結(jié)

    Python統(tǒng)計中文詞頻的四種方法小結(jié)

    統(tǒng)計中文詞頻是Python考試中常見的操作,本文我們總結(jié)了四種常見的中文詞頻統(tǒng)計方法,并列出代碼,具有一定的參考價值,感興趣的可以了解一下
    2023-08-08
  • python itchat實(shí)現(xiàn)微信好友頭像拼接圖的示例代碼

    python itchat實(shí)現(xiàn)微信好友頭像拼接圖的示例代碼

    本篇文章主要介紹了itchat實(shí)現(xiàn)微信好友頭像拼接圖的示例代碼,具有一定的參考價值,有興趣的可以了解一下
    2017-08-08
  • python基礎(chǔ)之元組

    python基礎(chǔ)之元組

    這篇文章主要介紹了python的元組,實(shí)例分析了Python中返回一個返回值與多個返回值的方法,需要的朋友可以參考下
    2021-10-10
  • 基于Python實(shí)現(xiàn)一個文件夾整理工具

    基于Python實(shí)現(xiàn)一個文件夾整理工具

    這篇文章主要為大家詳細(xì)介紹了如何基于Python實(shí)現(xiàn)一個簡單的文件夾整理工具,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-10-10
  • 用python與文件進(jìn)行交互的方法

    用python與文件進(jìn)行交互的方法

    本篇文章主要介紹了用python與文件進(jìn)行交互的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • 如何使用python中的networkx來生成一個圖

    如何使用python中的networkx來生成一個圖

    這篇文章主要介紹了如何使用python中的networkx來生成一個圖,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • python 切換root 執(zhí)行命令的方法

    python 切換root 執(zhí)行命令的方法

    今天小編就為大家分享一篇python 切換root 執(zhí)行命令的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • python?opencv背景減去法摳圖實(shí)現(xiàn)示例

    python?opencv背景減去法摳圖實(shí)現(xiàn)示例

    這篇文章主要為大家介紹了python?opencv背景減去法摳圖實(shí)現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • python 使用MyQR和qrcode來制作二維碼

    python 使用MyQR和qrcode來制作二維碼

    這篇文章主要介紹了python 如何使用MyQR和qrcode來制作二維碼,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下
    2021-05-05

最新評論

华容县| 清新县| 莱阳市| 太湖县| 芒康县| 喀喇| 田林县| 延津县| 崇文区| 嘉祥县| 佛教| 宣恩县| 耿马| 洛宁县| 大悟县| 滦平县| 大兴区| 广河县| 林口县| 镶黄旗| 朝阳区| 开江县| 洛阳市| 讷河市| 大同县| 高雄县| 闻喜县| 青河县| 伊宁市| 翼城县| 肃北| 岳池县| 济宁市| 乐清市| 务川| 成安县| 丹江口市| 石首市| 仁布县| 兴化市| 尼玛县|