Python中如何通过单次JSON请求向数据库表批量插入多条数据
批量插入适配修改方案
核心修改逻辑
- 首先判断请求传入的JSON是否为数组,若为单条对象则自动转为单元素数组,可同时兼容单条/批量插入场景
- 废弃原有字符串拼接SQL的写法,改用参数化批量查询,既避免SQL注入风险,也能大幅提升批量插入的性能
- 修复原有代码的隐藏bug:原SQL语句声明了5个插入字段(VIN, Make, Year, Color, username),但VALUES仅传入4个参数,需补充username对应的取值逻辑
修改后完整代码
@app.route('/api/addcar', methods = ['POST']) def adding_stuff(): request_data = request.get_json() # 兼容单条/批量输入:如果不是数组就包成数组 if not isinstance(request_data, list): car_list = [request_data] else: car_list = request_data # 预编译参数化SQL,注意补充你缺失的username字段取值逻辑 sql = "INSERT INTO carsTEST (VIN, Make, Year, Color, username) VALUES (%s, %s, %s, %s, %s)" # 批量组装参数 params = [] for car in car_list: # 注意:如果你的请求参数里没有Color、username字段,需要对应调整或者设置默认值 new_vin = car['VIN'] new_make = car['Make'] new_year = car['Year'] new_color = car['Color'] # 补充username的取值,比如从登录态获取,这里按你自己的业务逻辑修改即可 username = "your_business_logic_value" params.append((new_vin, new_make, new_year, new_color, username)) conn = create_connection() # 用executemany执行批量插入,比循环执行单条插入性能高很多 cursor = conn.cursor() cursor.executemany(sql, params) conn.commit() cursor.close() conn.close() return f'Post worked, inserted {len(params)} records'
注意事项
- 你提供的示例JSON里没有
Color和username字段,实际请求时需要补充对应字段,或者在代码里增加默认值、缺省校验逻辑,避免取值报错 - 参数化查询的占位符写法根据你使用的数据库驱动可能有差异:比如MySQL用
%s,SQLite用?,根据实际情况调整即可 - 上述代码已经兼容原有单条插入的调用方式,不需要修改旧的调用逻辑
内容的提问来源于stack exchange,提问作者Robotboy
相关产品推荐
相关产品推荐

