[英]SQLAlchemy (sql) conditional query
我有这个问题,我有一个像这样的表product
有两列target
和actual
,我如何建立一个查询并告诉它: if target == '' then select from actual
。 更清楚的是,这是我的表product
,有两列:
actual | target
---------------
p12 | <null>
p14 | h20
p16 | <null>
p16 | <null>
p16 | <null>
p16 | <null>
p16 | <null>
所以我想选择一个值'xx',如何在SQLAlchemy(或sql)中建立这个条件,告诉它在列target
查找它但是如果单元格为空(为空)则在里面寻找它actual
列单元格。
这可能吗?
听起来你想要COALESCE()
,它接受多个参数并返回第一个非null(如果所有args为null则返回null)
假设合理的设置:
import sqlalchemy as sa
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class Product(Base):
__tablename__ = "product"
id = sa.Column(sa.Integer, primary_key=True)
actual = sa.Column(sa.String)
target = sa.Column(sa.String)
使用sqlalchemy.func.coalesce()
:
>>> print session.query(sa.func.coalesce(Product.target, Product.actual).label('x'))
SELECT coalesce(product.target, product.actual) AS x
FROM product
>>> session.query(sa.func.coalesce(Product.target, Product.actual).label('x')).all()
[(u'p12'), (u'h20'), (u'p16'), (u'p16'), (u'p16'), (u'p16'), (u'p16')]
编辑:如果您的缺失值不为null,而是其他一些值,则应使用CASE
表达式。
>>> print session.query(sa.case([(Product.target == '', Product.actual)], else_=Product.target))
SELECT CASE WHEN (product.target = :target_1) THEN product.actual ELSE product.target END AS anon_1
FROM product
使用IFNULL(Target,Actual)
代替Target
ISnull是SQL,ifnull是mysql,对不起。
SQL有一个case语句。 在这种情况下,它将是这样的:
如果目标不是真的那么情况下,目标是实际的
我不是数据库专家,但我使用过这个结构。 Mytarget是一个新专栏
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.