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

首頁 > 編程 > Python > 正文

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

2020-02-16 00:26:41
字體:
來源:轉載
供稿:網友

運維平臺導入數據這一功能實在是太重要了,我敢說在沒有建自己的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" 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”這個參數就可以,其它無特別說明。

展示如圖:

加入路由,

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"))            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 石狮市| 陆河县| 佛冈县| 东莞市| 东乡| 申扎县| 开江县| 抚顺县| 乌拉特中旗| 富锦市| 新巴尔虎右旗| 武宁县| 黎川县| 青铜峡市| 宜宾县| 民勤县| 宿迁市| 株洲市| 来宾市| 永年县| 新营市| 封开县| 乐平市| 德安县| 佛冈县| 昔阳县| 阳泉市| 阆中市| 大洼县| 郑州市| 汝阳县| 诸城市| 澄江县| 武平县| 洪江市| 深圳市| 克拉玛依市| 桐庐县| 余干县| 彭阳县| 衡南县|