山茶花开时。 2023-07-17 16:21 采纳率: 55.6%
浏览 59

Flask实现类似数据处理项目

最近有个使用Flask进行练习项目的需求,类似实现Power BI中的Power Query进行数据清洗
下图右侧上方是导入的Input文件数据,下方是导入的Output文件的字段栏位,大致开发功能是对Input文件数据进行数据处理,将其结果放入到Output文件中

img

点击数据配置图文按钮,弹出参数配置窗口

img

输入上述三个指令(指令我考虑写一个Python函数库包),点击执行即可生成以下结果

img

问题1:配置参数中的计算逻辑代码,前端传过来,Flask后台如何去接收并调用自己写的函数库包?
问题2:目前已经写了导入Input以及Output的Excel文件接口,将数据存储进了Mysql中,Input文件数据存储在一个名为Input_table数据表,Output文件数据存储在一个名为output_table数据表,现在就是卡在我想通过前端传送过来的数据处理语法(目前语法还不确定),根据相关字段去识别我自己写的函数库包(考虑使用pandas来写),如何根据这个函数库包去操作Mysql?
问题3:每次执行一个指令,Output就会呈现出数据处理过后的结果,存储在Mysql中的Input_table和output_table数据表如何进行关联?

  • 写回答

1条回答 默认 最新

  • jio本小子 2023-07-21 17:06
    关注

    实现类似Power Query的数据清洗功能需要将前端的数据配置参数传递到后端,然后在后端调用自己编写的函数库包来进行数据处理和操作MySQL。让我们逐个解决您提出的问题:

    问题1:配置参数中的计算逻辑代码,前端传过来,Flask后台如何接收并调用自己写的函数库包?

    在Flask中,您可以通过HTTP请求将配置参数发送到后端。通常,这种情况下使用POST请求比较合适。前端通过发送JSON格式的数据来传递配置参数。在Flask后端,您可以使用request对象解析前端传递的JSON数据,然后调用自己编写的函数库包进行数据处理。

    示例代码如下:

    前端(JavaScript代码):

    
    
    ```javascript
    
    // 假设配置参数已经组装成了一个包含计算逻辑的JSON对象
    const config = {
      command1: "some logic",
      command2: "some logic",
      command3: "some logic"
    };
    
    fetch('/execute', {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json'
      },
      body: JSON.stringify(config)
    })
    .then(response => response.json())
    .then(result => {
      // 处理后端返回的结果
      console.log(result);
    });
    
    
    

    后端(Flask代码):

    
    from flask import Flask, request, jsonify
    
    app = Flask(__name__)
    
    @app.route('/execute', methods=['POST'])
    def execute_logic():
        config = request.json  # 解析前端传递的JSON数据
    
        # 调用自己编写的函数库包来处理数据
        result = your_function_library.process_data(config)
    
        return jsonify(result)  # 返回结果给前端
    
    
    问题2:如何根据前端传送过来的数据处理语法去识别函数库包,并操作MySQL?
    
    您可以在自己编写的函数库包中定义一些特定的指令或标识符,来标识不同的数据处理操作。例如,您可以在配置参数中使用特定的字符串来表示不同的操作,然后在函数库包中解析这些字符串,并根据其进行相应的数据处理操作。
    
    示例代码(假设函数库包名为your_function_library):
    
    
    ```bash
    
    # your_function_library.py
    
    import pandas as pd
    import mysql.connector
    
    def process_data(config):
        # 获取数据库连接
        connection = mysql.connector.connect(
            host='localhost',
            user='your_username',
            password='your_password',
            database='your_database'
        )
    
        # 获取游标
        cursor = connection.cursor()
    
        # 解析前端传来的配置参数,执行对应的数据处理操作
        for command, logic in config.items():
            if command == 'command1':
                # 假设command1的逻辑是用pandas进行数据清洗并存储到MySQL
                input_df = pd.read_sql('SELECT * FROM Input_table', connection)
                output_df = your_data_processing_logic(input_df)
                output_df.to_sql('output_table', connection, if_exists='replace', index=False)
            elif command == 'command2':
                # 处理command2的逻辑
                # ...
            elif command == 'command3':
                # 处理command3的逻辑
                # ...
            else:
                # 处理其他情况
                # ...
    
        # 关闭游标和连接
        cursor.close()
        connection.close()
    
        return {'status': 'success'}
    
    # 编写您的数据处理逻辑
    def your_data_processing_logic(df):
        # 数据处理逻辑代码
        # ...
    
        return processed_df
    
    

    问题3:如何将执行指令后的Output数据与Input数据表进行关联?

    在上述示例代码中,我们使用了pandas库来处理数据,并使用to_sql()方法将处理后的结果存储到了MySQL的output_table数据表中。此时,输出数据已经和Input数据表没有直接的关联。如果您希望将Output数据与Input数据表进行关联,可以在处理逻辑中添加代码来实现。

    例如,您可以在your_data_processing_logic()函数中添加额外的列,表示数据处理操作对应的Input数据的相关信息,然后将结果写入Output数据表。

    示例代码:

    
    # your_function_library.py
    
    import pandas as pd
    import mysql.connector
    
    def process_data(config):
        # 获取数据库连接
        connection = mysql.connector.connect(
            host='localhost',
            user='your_username',
            password='your_password',
            database='your_database'
        )
    
        # 获取游标
        cursor = connection.cursor()
    
        # 解析前端传来的配置参数,执行对应的数据处理操作
        for command, logic in config.items():
            if command == 'command1':
                # 假设command1的逻辑是用pandas进行数据清洗并存储到MySQL
                input_df = pd.read_sql('SELECT * FROM Input_table', connection)
                output_df = your_data_processing_logic(input_df)
                # 添加输入数据相关信息到输出数据表中
                output_df['input_data_id'] = input_df['id']  # 假设有一个名为'id'的列作为Input数据表的主键
                output_df.to_sql('output_table', connection, if_exists='replace', index=False)
            elif command == 'command2':
                # 处理command2的逻辑
                # ...
            elif command == 'command3':
                # 处理command3的逻辑
                # ...
            else:
                # 处理其他情况
                # ...
    
        # 关闭游标和连接
        cursor.close()
        connection.close()
    
        return {'status': 'success'}
    
    # 编写您的数据处理逻辑
    def your_data_processing_logic(df):
        # 数据处理逻辑代码
        # ...
    
        return processed_df
    
    

    在上述示例中,我们假设Input数据表有一个名为id的列作为主键,并在输出数据表中添加了一个名为input_data_id的列,用于存储对应的Input数据的ID。这样就建立了Output数据与Input数据表的关联。

    请注意,以上只是一个简单的示例,实际实现中可能需要根据具体需求进行调整。同时,为了确保安全性,建议对从前端接收到的配置参数进行适当的验证和处理,避免潜在的安全风险。

    评论

报告相同问题?

问题事件

  • 创建了问题 7月17日

悬赏问题

  • ¥15 关于Lammps建模的描述
  • ¥15 #lingo#请问一下为什么会出现以下情况,是因为l第一个值是0的缘故吗?
  • ¥15 设计格雷码同步八进制计数器
  • ¥100 改写matlab程序(关键词-系统对)
  • ¥15 函数信号发生器仿真电路
  • ¥15 Qt的pixmap和image图片加载都导致程序崩溃怎么办
  • ¥15 Kali木马生成问题求解
  • ¥30 求一下解题思路,完全不懂
  • ¥15 C51单片机串口控制JQ6500语音模块
  • ¥30 想给yolo5模型加一个图片识别界面,但是图片还没有检测出来就闪退了