SQLAlchemy 核心表达式 - COALESCE 和 CASE

SQLAlchemy Core expression - COALESCE and CASE

我正在尝试生成对应于此 SQL 的核心表达式:https://dba.stackexchange.com/a/122116/47472

但是,这个表达式失败了:

q = select([
    component,
    base_vee,
    case(
        [
            (coalesce(base_vee.c.affidavit, '') == '')
        ],
        else_=True).label('emptyish')
    ]). \
    where(
        and_(
            component.c.id.in_(comp_ids),
            component.c.id == base_vee.c.component_id,
            base_vee.c.type == 'typical',
        )
    )

异常:

  File "/export/home/myuser/mysite/mysite/afile.py", line 527, in afunc
    else_=True).label('emptyish')
  File "<string>", line 2, in case
  File "/export/home/myuser/mysite/ve/lib/python2.7/site-packages/sqlalchemy/sql/elements.py", line 2187, in __init__
    _literal_as_binds(r)) for (c, r) in whens
  File "/export/home/myuser/mysite/ve/lib/python2.7/site-packages/sqlalchemy/sql/operators.py", line 343, in __getitem__
    return self.operate(getitem, index)
  File "/export/home/myuser/mysite/ve/lib/python2.7/site-packages/sqlalchemy/sql/elements.py", line 739, in operate
    return op(self.comparator, *other, **kwargs)
  File "/export/home/myuser/mysite/ve/lib/python2.7/site-packages/sqlalchemy/sql/operators.py", line 343, in __getitem__
    return self.operate(getitem, index)
  File "<string>", line 1, in <lambda>
  File "/export/home/myuser/mysite/ve/lib/python2.7/site-packages/sqlalchemy/sql/type_api.py", line 60, in operate
    return o[0](self.expr, op, *(other + o[1:]), **kwargs)
  File "/export/home/myuser/mysite/ve/lib/python2.7/site-packages/sqlalchemy/sql/default_comparator.py", line 166, in _unsupported_impl
    "this expression" % op.__name__)

当我删除 case 表达式(只留下 coalesce)时,它工作正常。但我无法让 Core 接受 case

如何让它与 case 一起工作?

原来是"RTFM carefully"的情况:

    case(
        [
            (coalesce(base_vee.c.affidavit, '') == '', False)
        ],
        else_=True).label('emptyish')
    ])