Как я могу добавить фильтр, как в SQL, для выбора значений, которые НЕ являются NULL из определенного столбца?
SELECT *
FROM table
WHERE YourColumn IS NOT NULL;
Как я могу сделать то же самое с фильтрами SQLAlchemy?
select = select(table).select_from(table).where(all_filters)
python
sqlalchemy
саламей
источник
источник
all_filters
здесь? Почемуselect_from
?Ответы:
column_obj != None
создастIS NOT NULL
ограничение :или используйте
isnot()
(новое в 0.7.9):Демо:
>>> 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'
источник
is
не может быть перегружен пользовательскими классами, как это!=
может быть.Начиная с версии 0.7.9 вы можете использовать оператор фильтра
.isnot
вместо сравнения ограничений, например:query.filter(User.name.isnot(None))
Этот метод необходим только в том случае, если вас беспокоит pep8.
источник: документация sqlalchemy
источник
NULL
оно недействительно, как RHS!=
в SQL, и использованиеisnot
лучше передает ваши намерения относительно того, как вы хотите, чтобы сгенерированный оператор выглядел.!= NULL
, даже если вы используетеcolumn != None
на стороне Python; вы получитеIS NOT NULL
. Однако использование.isnot()
позволяет принудительно использоватьIS NOT
другие типы (например, подумайте.isnot(True)
о логических столбцах).Если кому-то еще интересно, вы можете использовать
is_
для генерацииfoo IS NULL
:источник