使用SQLAlchemy批量更新触发StaleDataError的原因排查
StaleDataError触发原因分析
传入的id大量不存在于数据库
你准备更新80000条id对应的rating,但数据库中仅存在24017个匹配的id。SQLAlchemy的批量更新默认会校验实际更新行数与预期待更新条目数是否一致,当两者差距过大时,会判定为数据状态异常,抛出StaleDataError。批量更新的会话同步配置问题
若你的更新代码使用了默认的synchronize_session参数(值为'evaluate'或'fetch'),SQLAlchemy会在更新后检查会话内对象的状态,并验证更新行数是否符合预期。当大量id无匹配行时,实际更新行数远低于传入的条目数,触发错误。部分存在的id对应的rating已非Null
即使你认为rating当前都是Null,若数据库中部分存在的id对应的rating字段已有值,且你的更新语句包含了rating IS NULL的过滤条件,这部分行不会被修改,实际更新行数会进一步减少,导致与预期数量不符,触发错误。
内容的提问来源于stack exchange,提问作者stelios
相关产品推荐
相关产品推荐

