SQL Alchemy根据其他列的单元格中包含的值筛选行

时间:2016-06-04 18:52:53

标签: python database flask sqlalchemy flask-sqlalchemy

我是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中是否有任何内置函数来解决这个问题。

2 个答案:

答案 0 :(得分:3)

您可以选择根据SBranch

的值添加过滤器
query = Transaction.query
if SBranch != 0:
    query = query.filter(Transaction.branch == SBranch)

result = query.order_by(Transaction.id.desc()).limit(50).all()

答案 1 :(得分:-1)

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

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()