Jak mogę dodać filtr, tak jak w SQL, aby wybrać wartości, które NIE są NULL z określonej kolumny?
SELECT *
FROM table
WHERE YourColumn IS NOT NULL;
Jak mogę zrobić to samo z filtrami SQLAlchemy?
select = select(table).select_from(table).where(all_filters)
python
sqlalchemy
salamey
źródło
źródło
all_filters
tu jest ? Dlaczegoselect_from
?Odpowiedzi:
column_obj != None
stworzyIS NOT NULL
ograniczenie :lub użyj
isnot()
(nowy w 0.7.9):Próbny:
>>> 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'
źródło
is
nie można go przeciążać niestandardowymi klasami tak, jak!=
to możliwe.Począwszy od wersji 0.7.9 możesz użyć operatora filtru
.isnot
zamiast porównywać ograniczenia, na przykład:query.filter(User.name.isnot(None))
Ta metoda jest konieczna tylko wtedy, gdy pep8 jest problemem.
źródło: dokumentacja sqlalchemy
źródło
NULL
nie jest poprawne, jak RHS!=
w SQL, a użycieisnot
lepiej przekazuje twoje intencje dotyczące tego, jak ma wyglądać wygenerowana instrukcja.!= NULL
jednak, nawet jeśli używaszcolumn != None
po stronie Pythona; maszIS NOT NULL
. Użycie.isnot()
pozwala jednak na wymuszenieIS NOT
innych typów (.isnot(True)
na przykład pomyśl o kolumnach logicznych).Jeśli ktoś się zastanawia, możesz użyć
is_
do wygenerowaniafoo IS NULL
:źródło