You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 22:27:03