在将代码移到sqlalchemy之前,我有一个mysql查询,它在多个列中查找一个值(例如- WHERE 'value' in (col1, col2)
)当手动将查询提交到数据库时,它可以正常工作。
上面的用例相对简单,但是将来我可能会在两个以上的列上运行一个类似的查询,所以现在只想提前解决这个问题。
目前,我已经将我的查询转换为下面的(这是可行的),但我正在尝试找到一个类似于上面的语法。
metadata = sqlalchemy.MetaData(mydb, reflect=True)
select_stmt = (tbl_pbp.select(
((tbl_pbp.c.home_team == team_abbreviation) | (tbl_pbp.c.away_team == team_abbreviation))
& (tbl_pbp.c.is_corsi == True)))
当我尝试下面的方法时,我得到了一个语法错误,所以不确定它是否与 in_
我正在尝试使用的关键字。
metadata = sqlalchemy.MetaData(mydb, reflect=True)
select_stmt = (tbl_pbp.select(
(team_abbreviation in_(tbl_pbp.c.home_team, tbl_pbp.c.away_team)
& (tbl_pbp.c.is_corsi == True)))
非常感谢您的帮助-谢谢!
1条答案
按热度按时间zysjyyx41#
为了在sql表达式语言中将python值作为sql文本进行操作,必须使用
literal()
. 然后可以使用生成的构造来生成所需的IN
条款:这相当于生成一组与
OR
,如评论中所述。唯一的理由in_()
在这种情况下,应该是一个合适的序列,例如列表。请注意
in_
这里是sqlalchemy构造的方法,而不是python操作符in
,由于它如何处理__contains__()
:它隐式转换为bool
: