中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

django中上傳csv文件并進行入庫處理的示例

發布時間:2021-02-10 19:57:46 來源:億速云 閱讀:335 作者:小新 欄目:開發技術

這篇文章將為大家詳細講解有關django中上傳csv文件并進行入庫處理的示例,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

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

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

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

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

<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" >
     <button class="btn btn-primary"> <span class="glyphicon glyphicon-upload" ></span>Upload </button>
  </div> 
</div>
</form>

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

展示如圖:

django中上傳csv文件并進行入庫處理的示例

加入路由,

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請求那么進行分析處理,首先是檢查文件名是否是以csv結尾的,如果是就處理,不是就提示錯誤信息,再就是檢查下上傳文件的大小,其實這些檢查也還好,如果是自己整理的表導入基本也不用做這些檢查了,如果是有多人操作這些檢查就有必要了,然后開始循環迭代文件行,內容是以逗號分隔,這里假設就是4列,如果你的表格列很多可以做修改,最后保存入庫,如果有錯誤就記錄錯誤信息到日志文件中。

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

關于“django中上傳csv文件并進行入庫處理的示例”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

鸡东县| 横山县| 凌云县| 神池县| 灵宝市| 六安市| 陵川县| 吉木萨尔县| 寻甸| 弥渡县| 达孜县| 米易县| 韶山市| 土默特左旗| 湘西| 巫山县| 油尖旺区| 通化市| 鄂州市| 高陵县| 准格尔旗| 西林县| 绿春县| 浪卡子县| 禄劝| 墨脱县| 蒲江县| 三穗县| 肃南| 临漳县| 新和县| 米易县| 黄山市| 吴川市| 文水县| 布拖县| 龙岩市| 博客| 正安县| 满洲里市| 资阳市|