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
相关产品推荐
相关产品推荐

