django上传excel表读取数据保存到数据库

本文介绍了一个使用Django框架实现Excel文件上传和解析的方法。通过前端提供的HTML表单上传文件,后端采用Python的xlrd库读取Excel数据,并将数据保存到数据库中。特别注意的是,在保存数据前进行了事务处理确保数据一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

页面代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <form action="http://localhost:8000/excel_handle/" method="post" enctype="multipart/form-data">
        <input type="file" name="my_file">
        <input type="submit">
    </form>
</body>
</html>

后端代码,url不写了。主要时django代码。添加事务。有关联外键,先取出外键数据再写入数据库。

def excel_upload(request):
    '''
    :param request:
    :return: 上传文件excel表格 ,并进行解析
    '''
    if request.method == "POST":

        f = request.FILES['my_file']
        type_excel = f.name.split('.')[1]
        if 'xlsx' == type_excel:
            # 开始解析上传的excel表格
            wb = xlrd.open_workbook(filename=None, file_contents=f.read())  # 关键点在于这里
            table = wb.sheets()[0]
            nrows = table.nrows  # 行数
            # ncole = table.ncols  # 列数
            try:
                with transaction.atomic():
                    for i in range(1, nrows):
                        # if 4 == i:
                        #     i/0
                        rowValues = table.row_values(i)  # 一行的数据
                        good = models.GoodsManage.objects.get(international_code=rowValues[0])
                        models.SupplierGoodsManage.objects.create(goods=good, sale_price=rowValues[1],sale_min_count = rowValues[2])
            except Exception as e:
                return JsonResponse({'msg':'出现错误....'})

            return JsonResponse({'msg':'ok'})

        return JsonResponse({'msg':'上传文件格式不是xlsx'})

    return JsonResponse({'msg':'不是post请求'})

 

Django中处理Excel文件上传并读取其内容,通常需要借助第三方库,如`django_excel`、`openpyxl`或`pandas`等。以下是基本步骤: 1. **安装依赖库**: - 如果你想直接读取Excel文件数据,可以使用`openpyxl`(处理XLSX文件)或`xlrd`(处理xls文件)。 ``` pip install djangorestframework openpyxl # 或者 xlrd ``` 2. **模型定义**: 首先,在你的Django应用中,创建一个模型来存储文件信息,比如包含文件名和大小等字段。 3. **视图函数**: 使用Django REST Framework(DRF)或其他类似框架编写一个接收文件上传请求的视图。例如,你可以使用`FileField`接收文件,并将其保存到服务器的某个位置。 ```python from rest_framework import serializers, viewsets from .models import FileUpload class FileUploadSerializer(serializers.ModelSerializer): class Meta: model = FileUpload fields = ['file', 'filename'] class FileUploadViewSet(viewsets.ModelViewSet): queryset = FileUpload.objects.all() serializer_class = FileUploadSerializer def create(self, request, *args, **kwargs): file_data = request.data.get('file') # 这里假设文件已经被分片或处理成request.FILES['file'] file_upload = FileUpload(file=file_data) file_upload.filename = file_data.name file_upload.save() return Response({'detail': 'File uploaded successfully.'}) ``` 4. **读取文件内容**: 一旦文件被上传,你可以使用`openpyxl`或`xlrd`来打开并读取内容。这通常涉及到从数据库中获取已上传文件的路径,然后解析文件。 ```python def read_excel_content(upload_id): file_upload = FileUpload.objects.get(id=upload_id) if file_upload.file.name.endswith('.xlsx'): # 确定是否为XLSX文件 import openpyxl wb = openpyxl.load_workbook(filename=file_upload.file.path) sheet = wb.active data = [row.values for row in sheet.iter_rows()] elif file_upload.file.name.endswith('.xls'): import xlrd workbook = xlrd.open_workbook(file_upload.file.path) sheet = workbook.sheet_by_index(0) # 默认第一个sheet data = [[cell.value for cell in row] for row in sheet.get_rows()] else: raise ValueError("Unsupported file format.") return data ``` 5. **安全性和权限**: 考虑文件上传的安全性,确保只允许用户上传他们有权访问的文件,并对文件内容进行适当的验证和清理。
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值