【问题标题】:Slicing filter criteria in SQL alchemySQL alchemy 中的切片过滤条件
【发布时间】:2021-06-02 14:25:26
【问题描述】:

我有一个带有过滤条件的查询,我想对照第 3 行的切片进行检查。HouseReport.location 可以包含字符和数字。查询看起来像这样。

query = dbsession.query(HouseReport).filter(
    HouseReport.ID == loan.loan_id, 
    HouseReport.location[:1].notin_(('8', '9'))

)

有没有办法检查过滤条件的一部分是否不在 8 或 9 中,如第 3 行所示?谢谢。

【问题讨论】:

  • 你使用的是什么数据库?
  • 我正在使用 SQL 服务器。

标签: python sqlalchemy


【解决方案1】:

由于您只是比较第一个字符,因此有几个选项可以实现它。

选项 1: startswith(...)

...
filter(or_(
    HouseReport.location.startswith('8'),
    HouseReport.location.startswith('9'),
))

选项 2: SUBSTRING 函数

这是特定于数据库的,可能需要根据底层数据库以不同的方式实现。但 SA 似乎为大多数数据库实现了这一点(尽管没有记录)。请参阅this answer 了解更多信息。

...
filter(~func.substring(HouseReport.location, 1, 1).in_(('8', '9')))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-08
    • 1970-01-01
    • 2017-06-13
    • 2021-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多