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

SqlAlchemy CASE语句报错ValueError: too many values to unpack (expected 2)原因

SQLAlchemy CASE语句报错排查

报错原因

你传入case()函数的when条件列表格式不符合SQLAlchemy的参数要求:case()的第一个参数需要是由(when条件, then返回值)二元元组组成的列表,你代码中的括号位置错误,导致列表结构不符合要求。

具体出错点:你在and_()逻辑块的末尾多写了一个闭合括号,导致条件表达式和返回值'Y'没有被包裹在同一个元组内,最终传入的列表实际为[条件对象, 'Y'],而非预期的[(条件对象, 'Y')]。case()遍历列表时会尝试将每个元素解包为「条件+返回值」两个值,而你列表的第一个元素是单独的and_表达式对象,该对象可迭代且内部元素数量大于2,因此触发ValueError: too many values to unpack (expected 2)。

修正后的代码

casePrimaryApprover = case(
    [
        # 去掉了and_末尾多余的闭合括号,将条件和返回值'Y'放在同一个元组内
        (and_(
            agreement.approving_official_id.is_not(None),
            approver.current_flag == 'Y',
            approver.inactive_date.is_(None), 
            approver.organizationalstat == 'EMPLOYEE',
            or_(
                participatingIc.ic_nihsac == func.substr(approver.nihsac, 1, 3), 
                externalPeoplePrimaryApprover.id.is_not(None)
            )
        ), 'Y')
    ],
    else_ = 'N'
)

修正后生成的SQL逻辑和你预期的完全一致。


内容的提问来源于stack exchange,提问作者gene b.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 19:48:02