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)
Ответы
Ответ 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)