Вопрос:

Вызов существует () в sqlalchemy с несколькими значениями в python

python mysql sqlalchemy

609 просмотра

1 ответ

31 Репутация автора

Я пытаюсь выяснить, есть ли более приятный способ проверить, содержит ли таблица пользователей группу имен, а не проверять их по одному.

Это то, что я использую для проверки таблицы User по одному, что дает мне значение True или False, если пользователь существует в таблице:

ret = session.query(exists().where(Users.name == 'Jack')).scalar()  

Так есть ли способ сделать это:

ret = session.query(exists().where(Users.name == 'Jack', 'Bob', 'Sandy')).scalar()

Вместо этого:

ret1 = session.query(exists().where(Users.name == 'Jack')).scalar()  
ret2 = session.query(exists().where(Users.name == 'Bob')).scalar()  
ret3 = session.query(exists().where(Users.name == 'Sandy')).scalar()  
Автор: zet Источник Размещён: 22.08.2016 09:39

Ответы (1)


1 плюс

5868 Репутация автора

Решение

Вы правильно используете exists()выражение, но объединяете его с подзапросом, который использует in_()выражение.

q = session.query(Users).filter(Users.name.in_(['Jack', 'Bob', 'Sandy']))
# Below will return True or False
at_least_one_user_exists = session.query(q.exists()).scalar()

Это переводит на следующий SQL:

SELECT EXISTS (
    SELECT 1 FROM users WHERE users.name IN ('Jack', 'Bob', 'Sandy')
) AS anon_1

... только запрос SQLAlchemy, описанный выше, вернет TrueилиFalse

Автор: The Aelfinn Размещён: 22.08.2016 09:55
Вопросы из категории :
32x32