求一套很详细很详细的代码讲解或者很详细的思路也可以,刚入门不会
希望帮帮忙
需求:将文件从前端上传到后端 存入数据库
要强大的系统思路 判断各种可能出现的可能
主要用到下面几个模块: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)
上面三步就搞定了,记得点个采纳哦!
步骤流程:
示例代码:
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框架,后台简单