【问题标题】:SQL Alchemy Filter rows based on the values contained in cells of other columnSQL Alchemy 根据其他列的单元格中包含的值过滤行
【发布时间】:2016-06-04 18:52:53
【问题描述】:

我是python和SQLALCHEMY的新手,我遇到了这个疑问,我们是否可以根据同一张表的列的单元格值过滤表的行。 示例:

Sbranch=value
result=Transaction.query.filter(Transaction.branch==Sbranch)
                          .order_by(desc(Transaction.id)).limit(50).all()

如果Sbranch=0 的值,我想读取所有行而不考虑Sbranch 值,否则我想过滤包含Transaction.branch==Sbranch 的行。

我知道可以通过比较Sbranch(if-else 条件)的值来实现,但是随着此类列的数量增加,它变得复杂。 示例:

Sbranch=value1
trans_by=value2
trans_to=value3
.
.
result=Transaction.query.filter(Transaction.branch==Sbranch,Transaction.trans_by==value2,Transaction_to==trans_to)
.order_by(desc(Transaction.id)).limit(50).all()

我想对所有 3 列应用类似的过滤器。

我想知道 SQLALCHEMY 中是否有针对这个问题的内置函数。

【问题讨论】:

    标签: python database flask sqlalchemy flask-sqlalchemy


    【解决方案1】:

    您可以选择根据SBranch 的值添加过滤器

    query = Transaction.query
    if SBranch != 0:
        query = query.filter(Transaction.branch == SBranch)
    
    result = query.order_by(Transaction.id.desc()).limit(50).all()
    

    【讨论】:

    • 但是当我用更多这样的列过滤表时,这会变得复杂。现在我想根据这样 6 列的单元格过滤表格。
    • 其实你问题的哪一部分是“另一栏”?
    • 对不起,可以是表格中的任意一列。
    • 可能是什么? SBranch?它是一个值,还是一个列?
    • 省略过滤器将比包含一堆INs 更有效地查询。它也不需要包含所有值。
    【解决方案2】:

    我想我找到了解决方案,它不是最好的,但会减少开发人员(而不是处理器)的工作量。

    Sbranch=value
    branches=[]
    if Sbranch==0:
       # Append all the values into the array for which the rows are filtered
       # for example:
       branches=[1,2,4,7,3,8]
    else:
       branches.append(branch)
    
    result=Transaction.query.filter(Transaction.branch.in_(branches))
                              .order_by(desc(Transaction.id)).limit(50).all()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-02
      • 2021-05-12
      • 1970-01-01
      • 1970-01-01
      • 2016-04-22
      • 2020-01-18
      相关资源
      最近更新 更多