django将上传的excel存入数据库

求一套很详细很详细的代码讲解或者很详细的思路也可以,刚入门不会
希望帮帮忙
需求:将文件从前端上传到后端 存入数据库
要强大的系统思路 判断各种可能出现的可能

主要用到下面几个模块:pandas、sqlalchemy 、django
1、首先定义一个django的视图,用于接受用户上传的excel文件

def index(request):
    username = request.session.get("username")
    tip = "请选择要上传的文件!"
    if request.method=="POST":
        #上传文件
        myFile = request.FILES.get("file", None)  # 获取上传的文件,如果没有文件,则默认为None
        tip="上传文件成功!"
        models.files.objects.create(files_name=myFile,files_user_id=username)
        return render(request, "index.html", {"tip": tip, "username": username})
    return render(request,"index.html",{"tip":tip,"username":username})

2、然后用sqlalchemy 定义一个数据库链接,

from sqlalchemy import create_engine
engine = create_engine(str(r"mysql+mysqldb://%s:" + '%s' + "@%s/%s") % (user, password, host, db))

3、最后用pands将excel数据读出来,再写入mysq数据库

import pandas as pd
df = pd.read_excel('file.excel', sheet_name='Sheet0')
df.to_sql('test1',con=engine,if_exists='replace',index=False)

上面三步就搞定了,记得点个采纳哦!

步骤流程:

  1. 上传文件到服务器指定目录 此例使用 /upload
  2. 读取Excel表格中内容,拼接成sql, 批量执行sql

示例代码:
setting.py

import os

# 文件上传配置
UPLOAD_ROOT = os.path.join(BASE_DIR,'upload')

urls.py 中添加路由


path('upload/', views.upload, name='upload'),

视图 views.py

import os
import xlrd
import pymysql
from 【项目名称】 import settings
from django.shortcuts import render, redirect, HttpResponse

# 读取Excel中的名单插入到 Mysql数据库
def saveToDb(filename):
    # 建立一个MySQL连接
    conn = pymysql.connect(
        host='x.x.x.x',
        user='username',
        passwd='password',
        db='dbname',
        port=3306,
        charset='utf8'
    )
    
    # 打开upload目录中的表格
    excel = xlrd.open_workbook(settings.UPLOAD_ROOT + "/" + filename)
    sheet = excel.sheet_by_index(0)
    
    # 双列表形式 ,一行一个用例 将excel文件记录读取并保存到 list:table
    table = []
    for i in range(0, sheet.nrows):
        case_info = []
        for j in range(sheet.ncols):
            case_info.append(sheet.cell_value(i, j))
        table.append(case_info)

    # 使用cursor()方法获取操作游标
    cursor = conn.cursor()
    
    # SQL 插入语句
    query = '''INSERT INTO table1(
                    id, realname, phone, address) VALUES (
                    %s, %s, %s, %s)'''

    valueList = []
    for i in range(0, sheet.nrows):
        uid = str(uuid.uuid4()).upper()
        id = ''.join(uid.split('-'))
        realname = table[i][0].strip()  # 表格第一列
        phone = table[i][1].strip()  # 表格第二列
        address = table[i][2].strip()  # 表格第三列
        
        # 每行记录拼接成一个元组
        item = (id, realname, phone, address)   
        
        # 将多行记录追加至数组               
        valueList.append(item)

    try:
        # 执行sql语句
        cursor.executemany(query, valueList)
        # 提交到数据库执行
        conn.commit()
        msg = '本次上传'+ str(sheet.nrows) + '条记录成功.'
        
    except:
        conn.rollback()
        msg = '上传失败,请检查表格内容.'
        
    # 关闭数据库连接
    conn.close()
    
    return msg




def upload(request):
    file = request.FILES.get('file')

    # 文件格式校验.
    if '.' not in file.name:
        return HttpResponse('上传文件格式无效,请重新上传.')
    elif file.name.split(".")[1] not in ['xls','xlsx']:
        return HttpResponse('上传文件格式非Excel表格,请重新上传.')

    # 创建upload文件夹
    if not os.path.exists(settings.UPLOAD_ROOT):
        os.makedirs(settings.UPLOAD_ROOT)
    try:
        if file is None:
            return HttpResponse('请选择要上传的文件')
        # 循环二进制写入
        with open(settings.UPLOAD_ROOT + "/" + file.name, 'wb') as f:
            for i in file.readlines():
                f.write(i)

        # 写入 mysql
        result = saveToDb(file.name)

    except Exception as e:
        return HttpResponse(e)

    return HttpResponse(result)

模版html
upload.html

<form id="form"  enctype="multipart/form-data" action="/upload/" method="post">
       {% csrf_token %}
      <input type="file"  name="file"><br />
      <input type="submit" name="提交">
</form>

文件说实话,是不建议直接存数据库里的,一般在数据库存文件的路径地址。

github上有很多demo

直接上demo,试过就知道强大不

用最普通的表单上传文件的方式就行,入门不用考虑太复杂的。

我在我们的数据管理平台(基于django) ,叠加过一个应用 , 目标是上传几种报表文件(EXCEL 固定格式), 选取某些数据存入数据库。 然后在另一个页面做数据展示,对于不达标的数据,把数据颜色改成红色。

按你的需求,建议是 mysql + diango + openpyxl
解决几个问题:
1、搭建Django框架
2、完成一个简单界面,登录,上传文件,展示数据,查看日志
3、设计数据存储结构,设计日志存储格式(这个应用,提前想好日志的需求,不然真正应用起来,再加很麻烦)
4、 完成相关模块 , 数据接口 , excel 解析 , django 相关 views 的 代码

这个很大很大,一个问答说实话解决不了你的问题,学习相关知识吧,不过这个思路应该是很简单的,但是实现比你想象中要复杂的多

我之前用的是django+xadmin插件。

首先你先搭建一下Django框架,后台简单