Функция not_
Функция not_ создает SQL-выражение
логического отрицания NOT. Первым
параметром передается условие, которое
нужно инвертировать. Функция возвращает
объект выражения, который можно использовать
в методах where, filter и других
частях запроса.
Синтаксис
not_(condition)
Пример
Давайте создадим простое выражение отрицания и выведем его:
from sqlalchemy import column, not_
res = not_(column('status') == 'article')
print(res)
Результат выполнения кода:
"NOT (status = :status_1)"
Пример
Давайте применим not_ в запросе
к таблице articles, чтобы выбрать все
статьи, кроме опубликованных:
from sqlalchemy import create_engine, select, not_, column
engine = create_engine('sqlite:///:memory:')
stmt = select(column('title')).where(
not_(column('status') == 'published')
)
print(stmt)
Итоговый SQL запрос:
SELECT title
FROM articles
WHERE NOT (status = :status_1)
Пример
Давайте скомбинируем not_ с функцией
and_ для построения сложного условия:
from sqlalchemy import create_engine, select, not_, and_, column
engine = create_engine('sqlite:///:memory:')
stmt = select(column('title')).where(
and_(
not_(column('status') == 'draft'),
column('num') > 10
)
)
print(stmt)
Итоговый SQL запрос:
SELECT title
FROM articles
WHERE NOT (status = :status_1) AND num > :num_1
Пример
Давайте применим двойное отрицание not_(not_(...))
и проверим результат:
from sqlalchemy import column, not_
condition = column('status') == 'article'
res = not_(not_(condition))
print(res)
Результат выполнения кода:
"NOT (NOT (status = :status_1))"
Пример
Давайте применим not_ с оператором in_,
чтобы исключить строки с определенными статусами:
from sqlalchemy import create_engine, select, not_, column
engine = create_engine('sqlite:///:memory:')
stmt = select(column('title')).where(
not_(column('status').in_(['draft', 'archived']))
)
print(stmt)
Итоговый SQL запрос:
SELECT title
FROM articles
WHERE status NOT IN (:status_1, :status_2)