簡體   English   中英

sqlalchemy存在查詢

[英]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()

返回TrueFalse

我不知道使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM