[英]sqlalchemy exists for query
如何檢查查詢中的數據是否存在?
例如:
users_query = User.query.filter_by(email='x@x.com')
我如何檢查具有該 email 的用戶是否存在?
我可以檢查這個
users_query.count()
但如何用exists檢查它?
以下解決方案稍微簡單一點:
from sqlalchemy.sql import exists
print session.query(exists().where(User.email == '...')).scalar()
對我來說,最可接受和最易讀的選擇是
session.query(<Exists instance>).scalar()
喜歡
session.query(User.query.filter(User.id == 1).exists()).scalar()
返回True
或False
。
我不知道使用orm查詢api來做到這一點。 但是你可以降低到更低的水平並使用sqlalchemy.sql.expression中的存在 :
from sqlalchemy.sql.expression import select, exists
users_exists_select = select((exists(users_query.statement),))
print engine.execute(users_exists_select).scalar()
對於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 = '...'
2021 答案
避免調用.query
方法並使用與.exists
方法直接鏈接的select
語句,如下所示:
from sqlalchemy import select
user = select(User).where(email="x@x.com").exists()
來源: https : //docs.sqlalchemy.org/en/14/core/selectable.html?highlight=exists#sqlalchemy.sql.expression.exists
可以辦到:
from sqlalchemy import select
user = session.scalars(
select(User).where(User.email=="x@x.com")
).first()
if user:
pass
else:
pass
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.