带括号的 SQLAlchemy 连词
Posted
技术标签:
【中文标题】带括号的 SQLAlchemy 连词【英文标题】:SQLAlchemy Conjunction with Parentheses 【发布时间】:2015-07-08 03:56:02 【问题描述】:我正在尝试在 sqlalchemy 核心中生成以下 sql。我无法让连词 AND OR 中的括号出现。
select from member t1
inner join member t2
on (
(
t1.first_name = t2.last_name and
t1.last_name = t2.first_name and
t1.dob = t2.dob
)
or (
t1.last_name = t2.last_name and
t1.first_name = t2.first_name and
t1.dob = t2.dob
)
)
group by t2.id
我正在使用的 sqlalchemy 核心语句是:
selStmt = select([t1]).select_from(
t1.join(
t2, or_(
and_(
t1.c.first_name == t2.c.last_name,
t1.c.last_name == t2.c.first_name,
t1.c.dob == t2.c.dob
),
and_(
t1.c.last_name == t2.c.last_name,
t1.c.first_name == t2.c.first_name,
t1.c.dob == t2.c.dob
)
)
)
).group_by(t2.c.id)
生成的sql代码为:
SELECT t1
FROM t1
JOIN t2 ON
t1.first_name = t2.last_name AND
t1.last_name = t2.first_name AND
t1.dob = t2.dob OR
t1.last_name = t2.last_name AND
t1.first_name = t2.first_name AND
t1.dob = t2.dob
GROUP BY t2.id
由于括号不包括在内,逻辑不正确。如何在连词中获得括号?
【问题讨论】:
逻辑正确,and
的优先级高于or
。
【参考方案1】:
显然,AND 操作的优先级高于 OR。因此,在我的情况下,括号不是必需的。
【讨论】:
以上是关于带括号的 SQLAlchemy 连词的主要内容,如果未能解决你的问题,请参考以下文章