Метод notilike класса ColumnElement
Метод notilike класса ColumnElement
создает SQL-условие, которое проверяет,
что значение столбца не совпадает
с указанным шаблоном без учета регистра.
Этот метод является отрицанием метода ilike
и транслируется в оператор NOT ILIKE.
В качестве параметра other передается
строка шаблона, которая может содержать
специальные символы % и _.
Синтаксис
ColumnElement.notilike(other, escape=None)
Пример
Давайте создадим таблицу статей и найдем те,
чей заголовок не начинается с Article
без учета регистра:
from sqlalchemy import create_engine, select, String
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, Session
class Base(DeclarativeBase):
pass
class Article(Base):
__tablename__ = 'articles'
id: Mapped[int] = mapped_column(primary_key=True)
title: Mapped[str] = mapped_column(String(50))
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
with Session(engine) as session:
session.add_all([
Article(title='article one'),
Article(title='ARTICLE two'),
Article(title='user note'),
])
session.commit()
stmt = select(Article.title).where(
Article.title.notilike('article%')
)
res = session.execute(stmt).scalars().all()
print(res)
Результат выполнения кода:
['user note']
Итоговый SQL запрос:
SELECT articles.title
FROM articles
WHERE articles.title NOT ILIKE 'article%'
Пример
Давайте найдем статьи, заголовок которых
не содержит подстроку sql в любом регистре:
from sqlalchemy import create_engine, select, String
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, Session
class Base(DeclarativeBase):
pass
class Article(Base):
__tablename__ = 'articles'
id: Mapped[int] = mapped_column(primary_key=True)
title: Mapped[str] = mapped_column(String(50))
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
with Session(engine) as session:
session.add_all([
Article(title='SQL basics'),
Article(title='sql advanced'),
Article(title='python guide'),
Article(title='user manual'),
])
session.commit()
stmt = select(Article.title).where(
Article.title.notilike('%sql%')
)
res = session.execute(stmt).scalars().all()
print(res)
Результат выполнения кода:
['python guide', 'user manual']
Итоговый SQL запрос:
SELECT articles.title
FROM articles
WHERE articles.title NOT ILIKE '%sql%'
Пример
Давайте используем параметр escape,
чтобы экранировать символ подчеркивания
в шаблоне и найти статьи, чей заголовок
не соответствует маске article_:
from sqlalchemy import create_engine, select, String
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, Session
class Base(DeclarativeBase):
pass
class Article(Base):
__tablename__ = 'articles'
id: Mapped[int] = mapped_column(primary_key=True)
title: Mapped[str] = mapped_column(String(50))
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
with Session(engine) as session:
session.add_all([
Article(title='article_1'),
Article(title='article one'),
Article(title='user note'),
])
session.commit()
stmt = select(Article.title).where(
Article.title.notilike('article\\_%', escape='\\')
)
res = session.execute(stmt).scalars().all()
print(res)
Результат выполнения кода:
['article one', 'user note']
Итоговый SQL запрос:
SELECT articles.title
FROM articles
WHERE articles.title NOT ILIKE 'article\_%' ESCAPE '\'
Смотрите также
-
метод
ilike,
который выполняет регистронезависимое сравнение по шаблону -
метод
like,
который выполняет регистрозависимое сравнение по шаблону -
метод
notlike,
который выполняет регистрозависимое отрицательное сравнение -
класс
ColumnElement,
который представляет элемент столбца в выражении