You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python Flask 3.4:如何合并MySQL与XML转换的两个JSON数据?

解决Flask返回双JSON数据的TypeError问题

我之前也碰到过这个错误,问题根源在于你对Flask视图函数的返回规则理解有误。当你返回(jsonvalue, xmlvalue)这样的元组时,Flask会默认把它解析成(响应体内容, HTTP状态码, 响应头)的结构,但你的第二个参数是JSON字符串,不是合法的数字类型状态码(比如200、404),所以才会抛出TypeError('Invalid status argument',)这个错误。

另外你的代码还有两个小问题需要修正:

  • 表1用jsonify()生成了一个Flask Response对象,表2却用json.dumps()转成了字符串,两者混合返回逻辑混乱
  • 没有正确关闭数据库连接,容易造成资源泄漏

下面是修正后的完整代码,我会把两个数据集合并成一个JSON对象再返回:

from flask import jsonify
import pymysql

def your_view_function():
    # 处理表1数据:获取XML转换后的Python原生结构(不要直接用jsonify)
    event = getxml()
    table1_data = event.getname('921')  # 假设这是可序列化的字典/列表

    # 处理表2数据:保留Python对象,不提前转成JSON字符串
    # 用with语句自动管理数据库连接,避免资源泄漏
    with pymysql.connect(host='', user='', password='', db='') as conn:
        with conn.cursor() as cursor:
            sql = 'SELECT logseq, logcode FROM `table2` WHERE Event_code = 921'
            cursor.execute(sql)
            row_headers = [x[0] for x in cursor.description]
            data = cursor.fetchall()
            table2_data = [dict(zip(row_headers, result)) for result in data]

    # 合并两个数据集到一个字典,统一成一个JSON结构
    combined_data = {
        "table1": table1_data,
        "table2": table2_data
    }

    # 用jsonify返回合并后的结果,Flask会自动处理序列化和响应头
    return jsonify(combined_data)

关键修改说明:

  • 合并数据结构:把表1和表2的Python原生数据(字典/列表)合并成一个大字典,避免返回两个独立的JSON内容
  • 遵循Flask返回规范:用jsonify()返回合并后的字典,它会自动设置Content-Type: application/json响应头,符合Web服务的标准
  • 优化资源管理:用with语句处理数据库连接和游标,确保操作完成后自动关闭,避免资源泄漏
  • 避免重复序列化:不要用json.dumps()提前转换表2数据,jsonify()会帮你完成序列化工作

这样修改后,就能正常返回包含两个表数据的单一JSON响应,不会再触发类型错误了。

内容的提问来源于stack exchange,提问作者Santha Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:28:33