Подтвердить что ты не робот

Sqlalchemy IS NOT NULL select

Как добавить фильтр, как в SQL, для выбора значений, которые не являются NULL из определенного столбца?

SELECT * 
FROM table 
WHERE YourColumn IS NOT NULL;

Как я могу сделать то же самое с фильтрами SQLAlchemy?

select = select(table).select_from(table).where(all_filters) 
4b9b3361

Ответ 1

column_obj != None создаст ограничение IS NOT NULL:

В контексте столбца выдается предложение a != b. Если цель None, выдает IS NOT NULL.

или используйте isnot() (новый в 0.7.9):

Внедрить оператор IS NOT.

Обычно IS NOT генерируется автоматически по сравнению со значением None, которое разрешается до NULL. Однако явное использование IS NOT может быть желательно при сравнении с булевыми значениями на определенных платформах.

Демо:

>>> from sqlalchemy.sql import column
>>> column('YourColumn') != None
<sqlalchemy.sql.elements.BinaryExpression object at 0x10c8d8b90>
>>> str(column('YourColumn') != None)
'"YourColumn" IS NOT NULL'
>>> column('YourColumn').isnot(None)
<sqlalchemy.sql.elements.BinaryExpression object at 0x104603850>
>>> str(column('YourColumn').isnot(None))
'"YourColumn" IS NOT NULL'

Ответ 2

Начиная с версии 0.7.9 вы можете использовать оператор фильтра .isnot вместо сравнения ограничений, например:

query.filter(User.name.isnot(None))

Этот метод необходим, только если проблема pep8.

источник: документация sqlalchemy

Ответ 3

Если кто-то еще задается вопросом, вы можете использовать is_ для генерации foo IS NULL:

>>> from sqlalchemy.sql import column
>>> print column('foo').is_(None)
foo IS NULL
>>> print column('foo').isnot(None)
foo IS NOT NULL

Ответ 4

Для меня, если я сделаю следующее, то получу ожидаемое поведение:

query = query.filter(Model1.column1 == None)

Если я сделаю следующее, тогда фильтр не будет применен:

query = query.filter(Model1.column1 is None)