gpt4 book ai didi

python - SQLAlchemy(sql) 条件查询

转载 作者:太空宇宙 更新时间:2023-11-03 12:14:45 34 4
gpt4 key购买 nike

我遇到了这个问题,我有一个像这样的表 product,其中包含两列 targetactual,我该如何构建查询和告诉它: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 列中查找它,但是如果单元格是empty(为 null)然后在 actual 列单元格中查找它。

这可能吗?

最佳答案

听起来你想要 COALESCE(),它接受几个参数并返回第一个不为 null 的参数(如果所有参数都为 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')]

编辑:如果您的缺失值不是空值,而是其他值,您应该使用 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

关于python - SQLAlchemy(sql) 条件查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22694038/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com