如何让Python Flask API返回按产品分组的指定格式FAQ数据?
解决Flask API FAQ数据按产品分组的格式转换问题
修改后的API代码
@app.route('/getProductFaqs') def productfaqs(): try: conn = mysql.connect() cursor = conn.cursor(pymysql.cursors.DictCursor) # 若表中有productid字段,推荐使用这条SQL替代下方语句,避免字符串拆分的潜在问题 # cursor.execute("SELECT productid, product_question, product_answer FROM questionFAQ") cursor.execute("SELECT id, product_name, product_question, product_answer FROM questionFAQ") rows = cursor.fetchall() # 按产品分组构建数据结构 product_groups = {} for row in rows: # 从product_name提取productid(示例:"product 1" → 1) # 若表中有productid字段,直接替换为 productid = row['productid'] product_name = row['product_name'] productid = int(product_name.split()[1]) # 构造单个问答对象 faq_entry = { "Question": row['product_question'], "Answer": row['product_answer'] } # 将问答对象添加到对应产品的列表中 if productid not in product_groups: product_groups[productid] = [] product_groups[productid].append(faq_entry) # 转换为目标格式的列表 formatted_result = [] for pid, faqs in product_groups.items(): formatted_result.append({ "productid": pid, "faqs": faqs }) resp = jsonify(formatted_result) resp.status_code = 200 return resp except Exception as e: print(e) return jsonify({"error": str(e)}), 500 finally: cursor.close() conn.close()
关键逻辑说明
- 数据分组:使用字典
product_groups存储每个产品对应的问答集合,键为productid,值为问答对象数组,确保同一产品的问答被归类到一起。 - 格式转换:将字典结构转换为数组结构,每个元素包含
productid和对应的问答列表,符合目标输出格式要求。 - 异常处理优化:新增了错误响应返回,便于前端捕获和处理异常情况。
正确的目标返回格式示例
[ { "productid": 1, "faqs": [ { "Question": "What is product 1?", "Answer": "answer product 1" } ] }, { "productid": 2, "faqs": [ { "Question": "What is product 2?", "Answer": "answer product 2" } ] } ]
注意事项
如果你的数据库表中存在专门的productid字段,请务必修改SQL查询语句,直接获取productid字段值,避免通过字符串拆分的方式(这种方式在product_name格式变化时容易出错)。
内容的提问来源于stack exchange,提问作者Buzz
相关产品推荐
相关产品推荐

