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数据表如何进行关联?

实现类似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数据表的关联。

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