Flask文件传输问题

问题1:如何使用flask接收前端传送过来的的Excel文件并将Excel文件数据导入到数据库Mysql中进行存储?
问题2:如何将存储在Mysql数据库中的数据以JSON格式传回给前端?

问题1.
1.在Flask应用程序中,使用request.files获取上传的文件对象,并保存到本地。

from flask import Flask, request
app = Flask(__name__)

@app.route('/upload', methods=['POST'])
def upload_file():
    file = request.files['file']
    file.save('path/to/save/file.xlsx')
    return 'File uploaded successfully'

2.使用pandas库读取Excel文件中的数据。

import pandas as pd

data = pd.read_excel('path/to/save/file.xlsx')

3.使用pymysql库连接到MySQL数据库,并将数据插入到数据库中。

import pymysql

# 连接到MySQL数据库
conn = pymysql.connect(host='localhost', user='your_username', password='your_password', database='your_database')

# 创建游标对象
cursor = conn.cursor()

# 使用循环遍历处理后的Excel数据,执行插入操作
for row in data.iterrows():
    # 获取每一行数据并执行插入语句
    insert_query = f"INSERT INTO your_table_name (column1, column2, ...) VALUES (%s, %s, ...)"
    cursor.execute(insert_query, tuple(row))

# 提交事务并关闭游标和连接
conn.commit()
cursor.close()
conn.close()

问题2:

1.查询MySQL数据库中的数据。

import pymysql
from flask import jsonify

# 连接到MySQL数据库
conn = pymysql.connect(host='localhost', user='your_username', password='your_password', database='your_database')

# 创建游标对象
cursor = conn.cursor()

# 执行查询语句,获取数据
select_query = "SELECT * FROM your_table_name"
cursor.execute(select_query)

# 获取所有行数据
result = cursor.fetchall()

# 关闭游标和连接
cursor.close()
conn.close()

2.将查询结果转换为JSON格式。

# 转换查询结果为列表字典格式
data = []
columns = [column[0] for column in cursor.description]
for row in result:
    data.append(dict(zip(columns, row)))

# 将数据转换为JSON格式
json_data = jsonify(data)
return json_data

3.在Flask应用程序中定义路由,将JSON数据返回给前端。

@app.route('/data', methods=['GET'])
def get_data():
    # 查询MySQL数据库中的数据并转换为JSON格式
    # ...

    return json_data

此处定义的路由是/data,当前端访问/data路由时,将返回存储在MySQL数据库中的数据以JSON格式。
按照这些步骤就可以解决你的问题,你看还有哪些地方不明白,可以继续交流。

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7745724
  • 这篇博客你也可以参考下:基于flask+mysql的学生管理系统简单开发(2)-注册
  • 除此之外, 这篇博客: Python flask中mysql查询返回json格式数据中的 参考 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
    • https://stackoverflow.com/questions/43796423/python-converting-mysql-query-result-to-json
    • http://chenxiaoyu.org/2009/11/10/python-mysqldb-return-dict/
    • https://stackoverflow.com/questions/38980044/looking-for-the-equivalent-of-dictcursor-in-flaskext-mysql
    • https://flask-mysqldb.readthedocs.io/en/latest/
  • 以下回答来自chatgpt:

    问题1: 我想在我的Flask应用中实现以下功能:接收前端传送过来的Excel文件,并将Excel文件的数据导入到MySQL数据库中进行存储。请问如何实现这个功能?

    解决方案如下:

    1. 在Flask中,可以使用Flask-Uploads库来处理文件上传的功能。首先,需要在项目中安装Flask-Uploads库:
    pip install Flask-Uploads
    
    1. 在Flask应用中导入Flask-Uploads模块,并创建一个UploadSet对象,用于处理文件上传:
    from flask import Flask
    from flask_uploads import UploadSet, configure_uploads, DATA
    
    app = Flask(__name__)
    app.config['UPLOADED_DATA_DEST'] = 'path/to/save/uploads'
    data = UploadSet('data', DATA)
    configure_uploads(app, data)
    
    1. 在Flask应用中创建一个路由,用于接收前端传送过来的Excel文件并保存到指定路径:
    from flask import request
    
    @app.route('/upload', methods=['POST'])
    def upload():
        if 'data' in request.files:
            filename = data.save(request.files['data'])
            return f'File {filename} uploaded successfully.'
        return 'No file selected.'
    

    这个路由将接收一个名为"data"的文件,并将其保存到指定路径中。

    1. 在Flask应用中,使用pandas库来读取Excel文件,并将数据导入到MySQL数据库中:
    import pandas as pd
    from sqlalchemy import create_engine
    
    engine = create_engine('mysql://username:password@localhost/db_name')
    
    @app.route('/import', methods=['POST'])
    def import_data():
        if 'data' in request.files:
            file = request.files['data']
            df = pd.read_excel(file)
            df.to_sql('table_name', con=engine, if_exists='replace')
            return 'Data imported successfully.'
        return 'No file selected.'
    

    这个路由将接收一个名为"data"的文件,使用pandas库将Excel文件读取为一个DataFrame对象,并使用SQLAlchemy将数据导入到MySQL数据库中。

    1. 最后,启动Flask应用,并访问对应的路由来进行文件上传和数据导入的操作。

    请注意替换代码中的路径、数据库连接信息、表名等参数,以适应你的具体情况。

    问题2: 我的应用中有一些数据存储在MySQL数据库中,请问如何将这些数据以JSON格式传回给前端展示?

    解决方案如下:

    1. 在Flask应用中导入Flask和MySQLdb模块,并创建一个MySQL连接:
    from flask import Flask, jsonify
    import MySQLdb
    
    app = Flask(__name__)
    conn = MySQLdb.connect(host='localhost', user='username', password='password', db='db_name')
    

    请注意替换代码中的数据库连接信息。

    1. 在Flask应用中创建一个路由,用于获取MySQL数据库中的数据并以JSON格式返回给前端:
    @app.route('/data', methods=['GET'])
    def get_data():
        cursor = conn.cursor()
        cursor.execute('SELECT * FROM table_name')
        data = cursor.fetchall()
        cursor.close()
    
        # 将数据转换为JSON格式
        json_data = []
        for row in data:
            json_data.append(dict(zip(cursor.column_names, row)))
    
        return jsonify(json_data)
    

    这个路由将执行一个SQL查询语句,获取MySQL数据库中的数据,并将数据转换为JSON格式返回。

    1. 最后,启动Flask应用,并访问对应的路由来获取MySQL数据库中的数据以JSON格式展示。

    请注意替换代码中的数据库连接信息和查询语句,以适应你的具体情况。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^