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')
])
我正在尝试生成对应于此 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')
])