sqlalchemy 查询中的 exists

85 投票
7 回答
109174 浏览
提问于 2025-04-17 03:38

我怎么检查查询中的数据是否存在呢?

举个例子:

users_query = User.query.filter_by(email='x@x.com')

我怎么能检查是否有使用那个邮箱的用户呢?

我可以用

users_query.count()

来检查,但我怎么用 exists 来检查呢?

7 个回答

16

我知道的没有办法可以通过ORM查询API来做到这一点。不过,你可以降级使用更底层的东西,使用来自sqlalchemy.sql.expression的exists

from sqlalchemy.sql.expression import select, exists

users_exists_select = select((exists(users_query.statement),)) 
print engine.execute(users_exists_select).scalar()
42

对我来说,最容易理解和可读的选择是

session.query(<Exists instance>).scalar()

像这样

session.query(User.query.filter(User.id == 1).exists()).scalar()

它会返回 TrueFalse

101

下面这个解决方案简单一些:

from sqlalchemy.sql import exists

print session.query(exists().where(User.email == '...')).scalar()

撰写回答