Flask循环遍历列表存入SQL数据库报ValueError错误如何解决
Flask批量写入数据库报错排查方案
核心错误原因
代码中的循环逻辑存在错误:
- 用
for i in items遍历列表时,i本身就是列表内的元素值(比如'abc'/'bcd'),不是下标索引 - 后续用
items[i]取值相当于用字符串当下标去列表查数据,直接触发类型不匹配的解包错误
修复后的完整代码
from datetime import datetime import requests from flask import Flask, request, make_response, jsonify from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) # 此处替换为你自己的数据库连接配置 app.config['SQLALCHEMY_DATABASE_URI'] = '你的数据库连接串' db = SQLAlchemy(app) # User模型定义,给time_stamp设置默认值实现自动生成时间 class User(db.Model): id = db.Column(db.Integer, primary_key=True) listOfItems = db.Column(db.String(100)) query = db.Column(db.String(200)) time_stamp = db.Column(db.DateTime, default=datetime.now) @app.route('/', methods=['POST']) def test(): if request.method == 'POST': try: query = request.form['url'] r = requests.get(query) output = r.json() items = output['result'] # 修正循环逻辑,直接取元素值 for item in items: user = User(listOfItems=item, query=query) db.session.add(user) # 所有数据添加完成后统一提交,避免频繁IO降低性能 db.session.commit() responseBody = {'message': items} return make_response(jsonify(responseBody)) except Exception as e: # Python3 异常捕获规范写法 responseBody = {'message': f'Oops! {e.__class__} occurred.'} return make_response(jsonify(responseBody), 500) else: responseBody = {'message': 'failed'} return make_response(jsonify(responseBody), 405)
其他补充说明
- 原代码的异常捕获语法
except Exception, e是Python2的写法,Python3需改为except Exception as e - 原代码错误返回直接返回元组不符合接口响应规范,统一改为JSON格式返回
- 批量写入时统一提交事务,可大幅提升接口响应速度
内容的提问来源于stack exchange,提问作者yivas81730
相关产品推荐
相关产品推荐

