如何将用户输入的JSON餐厅数据拆分后逐条存入MySQL数据库?
你的需求完全可以实现,属于非常基础的数据库多记录插入场景,学习阶段也可以快速完成开发。
第一步:调整MySQL表结构
首先优化存储结构,建议拆分两张表符合数据库设计规范,避免数据冗余:
user_info表:存储用户个人基础信息,字段包含user_id(主键)、姓名、手机号等你需要的用户字段user_restaurant表:存储用户选择的餐厅,每个餐厅单独存一条,字段包含id(自增主键,可选)、user_id(关联user_info表的user_id,非空)、restaurant_name(单个餐厅名称,非空)
第二步:Python API端核心处理逻辑
假设你用Flask框架开发API(用FastAPI、Django等其他框架的核心逻辑完全一致,仅接收请求的语法有区别),核心处理流程如下:
- 首先接收并解析Postman提交的JSON数据,建议约定的JSON格式参考:
{ "user_id": 1, "user_name": "张三", "phone": "13xxxxxxxxx", "restaurant_list": ["RestA", "Restb", "Restc"] }
- 先处理用户基础信息的新增/更新,避免重复存储用户数据
- 遍历
restaurant_list中的每一个餐厅名称,用参数化查询批量插入到user_restaurant表中,参考代码如下:
import pymysql from flask import Flask, request app = Flask(__name__) # 替换为你自己的数据库连接配置 db_config = { "host": "127.0.0.1", "user": "root", "password": "你的数据库密码", "database": "你的库名", "charset": "utf8mb4" } @app.route('/submit_restaurant', methods=['POST']) def submit_restaurant(): # 解析JSON请求参数 req_data = request.get_json() # 基础参数校验 if not req_data.get("user_id") or not req_data.get("restaurant_list"): return {"code": 400, "msg": "缺少必填参数"} rest_list = req_data["restaurant_list"] if len(rest_list) <5 or len(rest_list) >10: return {"code": 400, "msg": "餐厅数量需要在5-10个之间"} conn = pymysql.connect(**db_config) cursor = conn.cursor() try: # 可选:如果用户重复提交需要覆盖旧数据,先删除该用户之前的餐厅记录 # cursor.execute("DELETE FROM user_restaurant WHERE user_id = %s", req_data["user_id"]) # 批量插入新的餐厅记录 insert_sql = "INSERT INTO user_restaurant(user_id, restaurant_name) VALUES (%s, %s)" insert_params = [(req_data["user_id"], rest.strip()) for rest in rest_list if rest.strip()] cursor.executemany(insert_sql, insert_params) conn.commit() return {"code": 200, "msg": "提交成功", "insert_count": len(insert_params)} except Exception as e: conn.rollback() return {"code": 500, "msg": f"操作失败: {str(e)}"} finally: cursor.close() conn.close() if __name__ == '__main__': app.run(port=5000, debug=True)
注意事项
- 代码中用到了参数化查询,可以规避SQL注入风险,不要直接拼接SQL字符串执行
- 已经内置了餐厅数量的校验逻辑,不符合数量要求会直接返回错误提示
- 如果需要支持用户修改提交的内容,把代码中删除旧记录的注释打开即可,实现新提交内容覆盖旧内容的效果
内容的提问来源于stack exchange,提问作者Robotboy
相关产品推荐
相关产品推荐

