django-读取上传的excel文件,将数据存入数据库


后端代码如下:
1 def upload_device(request): 2 """文件上传""" 3 nowTime = datetime.now().strftime('%Y-%m-%d %H:%M:%S') 4 if request.method == 'POST': 5 f = request.FILES.get('file') 6 excel_type = f.name.split('.')[-1] 7 if excel_type in ['xls']: 8 # 开始解析上传的excel表格 9 wb = xlrd.open_workbook(filename=None, file_contents=f.read()) 10 table = wb.sheets()[0] 11 rows = table.nrows # 总行数 12 for i in range(1, rows): 13 row_values = table.row_values(i) 14 if (row_values[0] != "" and row_values[1] != "" and row_values[2] != "" and row_values[ 15 3] != "" and row_values[4] != "" and row_values[5] != "" and row_values[7] != "" and 16 row_values[8] != ""): 17 pass 18 else: 19 return JsonResponse("第" + str(i) + "行除手机号外其余项均不能为空", safe=False, 20 json_dumps_params={'ensure_ascii': False}) 21 with transaction.atomic(): # 控制数据库事务交易 22 for j in range(1, rows): 23 row_values = table.row_values(j) 24 device_asset_num = row_values[5] 25 device_phone_num = row_values[6] 26 if isinstance(device_asset_num, str): 27 device_asset_num = device_asset_num 28 elif isinstance(device_asset_num, float) and device_asset_num.is_integer(): 29 device_asset_num = int(float(device_asset_num)) 30 else: 31 pass 32 if device_phone_num == "" or device_phone_num == "无": 33 device_phone_numb = "无" 34 elif isinstance(device_phone_num, str): 35 device_phone_num = device_phone_num 36 elif isinstance(device_phone_num, float): 37 device_phone_num = int(float(device_phone_num)) 38 else: 39 pass 40 device_by_asset_num = DeviceInfo.objects.filter( 41 device_asset_num=device_asset_num) 42 if device_by_asset_num.exists(): 43 #使用JsonResponse都需要添加 json_dumps_params={'ensure_ascii':False} 否则显示不是UTF-8格式. 44 # 如果是列表格式,使用JsonResponse,需要添加safe=False 45 return JsonResponse("资产编号%s已存在" % (device_asset_num), safe=False, 46 json_dumps_params={'ensure_ascii': False}) 47 else: 48 DeviceInfo.objects.create(center_name=row_values[0], 49 device_name=row_values[1], 50 device_system=row_values[2].lower(), 51 device_factory=row_values[3], 52 device_system_version=row_values[4], 53 device_asset_num=device_asset_num, 54 device_phone_num=device_phone_num, 55 device_recipient=row_values[7], 56 device_user=row_values[8], 57 creator=row_values[7], 58 create_date=nowTime, 59 update_data=nowTime 60 ) 61 CirculationInfo.objects.create( 62 device_asset_num=DeviceInfo.objects.filter(device_asset_num=device_asset_num)[0], 63 device_user=row_values[8], 64 creator=row_values[7], 65 created_date=nowTime, 66 update_data=nowTime 67 ) 68 else: 69 return JsonResponse("文件类型错误", safe=False, json_dumps_params={'ensure_ascii': False}) 70 return redirect('/devices_list')
posted on 2021-09-25 19:36 cherry_ning 阅读(1156) 评论(0) 收藏 举报
浙公网安备 33010602011771号