sqlalchemy 查询中的 exists
我怎么检查查询中的数据是否存在呢?
举个例子:
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()
它会返回 True
或 False
。
101
下面这个解决方案简单一些:
from sqlalchemy.sql import exists
print session.query(exists().where(User.email == '...')).scalar()