sqlalchemy - это не NULL select


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

SELECT * 
FROM table 
WHERE YourColumn IS NOT NULL;

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

select = select(table).select_from(table).where(all_filters) 
3 55

3 ответа:

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'

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

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

этот метод необходим только в том случае, если pep8 является проблемой.

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

В случае, если кто-то еще это интересно, вы можете использовать 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