如何检查查询中的数据是否存在?
例如:
users_query = User.query.filter_by(email='x@x.com')
如何检查具有该电子邮件的用户是否存在?
我可以用
查看users_query.count()
但如何使用检查?
答案 0 :(得分:66)
以下解决方案更简单:
from sqlalchemy.sql import exists
print session.query(exists().where(User.email == '...')).scalar()
答案 1 :(得分:19)
对我来说,最可接受和最易读的选择是
session.query(<Exists instance>).scalar()
像
session.query(User.query.filter(User.id == 1).exists()).scalar()
返回True
或False
。
答案 2 :(得分:13)
我无法使用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()
答案 3 :(得分:0)
对于 SQL Server ,我必须这样做:
from sqlalchemy.sql.expression import literal
result = session.query(literal(True)).filter(
session.query(User)
.filter_by(email='...')
.exists()
).scalar()
print(result is not None)
# Resulting query:
# SELECT 1
# WHERE EXISTS (SELECT 1
# FROM User
# WHERE User.email = '...')
但是没有EXISTS
,它简单得多:
result = (
session.query(literal(True))
.filter(User.email == '...')
.first()
)
print(result is not None)
# Resulting query:
# SELECT TOP 1 1
# FROM User
# WHERE User.email = '...'