python - 是否可以在 filter_by 之间使用 or_
问题描述
我有这个查询,检查玩家是否在一个或另一列
SELECT event_id
FROM schedule
WHERE player1 = 1 and player2 = 2 or player1 = 2 and player2 = 1
这工作正常,但是我需要在 SQLAlchemy 中编写它,所以我想出了以下内容:
check_events = db.session.query(Schedule.event_id).filter(and_(Schedule.player1==form.player1.data, Schedule.player2==form.player2.data)).filter(and_(Schedule.player1==form.player2.data, Schedule.player2==form.player1.data))
问题是当我使用另一个过滤器或filter_by时,结果查询将使用AND而不是OR运算符
SELECT "Schedule".event_id AS "Schedule_event_id"
FROM "Schedule"
WHERE "Schedule".player1 = ? AND "Schedule".player2 = ? AND "Schedule".player1 = ? AND "Schedule".player2 = ?
我也觉得我最初的查询可能很丑陋,并且可以以不同的方式完成。尽管如此,是否可以使用or_ 'between' 过滤器?
解决方案
您想组合or_
并将and_
结果传递给单个filter()
. 例如:
from sqlalchemy import and_, or_
(
db.session.query(Schedule.event_id)
.filter(
or_(
and_(
Schedule.player1 == form.player1.data,
Schedule.player2 == form.player2.data,
),
and_(
Schedule.player2 == form.player1.data,
Schedule.player1 == form.player2.data,
),
)
)
)
这些类型的表达式只能传递给Query.filter()
. Query.filter_by()
只接受关键字参数并将它们转换为等式表达式 ( ==
)。