UFO ET IT

쿼리에 대한 sqlalchemy가 있습니다.

ufoet 2021. 1. 13. 07:29
반응형

쿼리에 대한 sqlalchemy가 있습니다.


쿼리의 데이터가 존재하는지 어떻게 확인합니까?

예를 들면 :

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

해당 이메일을 사용하는 사용자가 있는지 어떻게 확인할 수 있습니까?

나는 이것을 확인할 수 있습니다

users_query.count()

그러나 그것을 확인하는 방법 있습니까?


다음 솔루션은 조금 더 간단합니다.

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 서버 , 나는이 일을했다 :

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 = '...'

참조 URL : https://stackoverflow.com/questions/7646173/sqlalchemy-exists-for-query

반응형