我可以在Python级别上实现内联if
吗?
让我们来看看这种(简化的)情况:
# DB-level 'or'
db.session.query(Tableclass).filter(or_(Tableclass.column_1 == value_1,Tableclass.column_2 == value_2)).first()
# basic Python-level 'if'
if value_1:
db.session.query...value_1
if value_2:
db.session.query...value_2
除了像上面那样查询数据库或添加其他if
语句外,还可以通过以下方式实现相同的内联:
# desired inline Python 'if' at method level
db.session.query(Tableclass).filter({
if value_1 Tableclass.column_1 == value_1 \
else if value_2 Tableclass.column_2 == value_2 else None
}).first()
# ^-- or something similar at method level
或者,仅当基础值存在时,才使SQLAlchemy过滤器的一部分处于活动状态。
此处的主要动机是DRY并避免对None
值进行DB搜索。
尝试将starred expression与if
语句的内联组合设为suggested:
session.query(Foo).filter((*[Foo.attr1==attr1,Foo.attr2==attr2] if attr2 else *[Foo.attr1==attr1]))
但是我在SyntaxError: invalid syntax
得到了if
。
更新
目前,我使用this style将条件定义为可以附加在一起的单独变量:
query = session.query(Table)
conditions = []
if abc:
conditions.append(Table.field1 == foo)
if def:
conditions.append(Table.field2 == bar)
query = query.filter(or_(*conditions))
尽管我很欣赏Pierre V在为星标表达式和or_(Tableclass.column_1 == value_1,true() if value_1 is None else false())
建议修正语法时的回答。