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.
相关产品推荐
相关产品推荐

