РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
473 of 711 menu

Метод notlike

Метод notlike класса ColumnElement создает SQL-выражение отрицания оператора LIKE. Метод принимает первым параметром строку шаблона, которой не должна соответствовать колонка. В шаблоне можно использовать знаки подстановки: % для любой последовательности символов и _ для одного произвольного символа. Вторым необязательным параметром передается флаг escape для указания символа экранирования знаков подстановки.

Синтаксис

ColumnElement.notlike(other, escape=None)

Пример

Давайте создадим таблицу articles и выберем статьи, заголовок которых не начинается со слова article:

from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, select engine = create_engine('sqlite:///:memory:') metadata = MetaData() articles = Table( 'articles', metadata, Column('id', Integer, primary_key=True), Column('title', String), Column('text', String), Column('status', String), Column('num', Integer), ) metadata.create_all(engine) with engine.begin() as conn: conn.execute(articles.insert(), [ {'title': 'article one', 'text': 'text 1', 'status': 'draft', 'num': 1}, {'title': 'article two', 'text': 'text 2', 'status': 'published', 'num': 2}, {'title': 'user guide', 'text': 'text 3', 'status': 'draft', 'num': 3}, {'title': 'sqlite notes', 'text': 'text 4', 'status': 'published', 'num': 4}, ]) stmt = select(articles.c.title).where( articles.c.title.notlike('article%') ) with engine.connect() as conn: res = conn.execute(stmt).scalars().all() print(res)

Результат выполнения кода:

['user guide', 'sqlite notes']

Пример

Давайте используем знак подстановки _ для поиска заголовков, где четвертый символ не равен букве t:

from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, select engine = create_engine('sqlite:///:memory:') metadata = MetaData() articles = Table( 'articles', metadata, Column('id', Integer, primary_key=True), Column('title', String), Column('text', String), Column('status', String), Column('num', Integer), ) metadata.create_all(engine) with engine.begin() as conn: conn.execute(articles.insert(), [ {'title': 'art one', 'text': 'text 1', 'status': 'draft', 'num': 1}, {'title': 'art two', 'text': 'text 2', 'status': 'published', 'num': 2}, {'title': 'post one', 'text': 'text 3', 'status': 'draft', 'num': 3}, ]) stmt = select(articles.c.title).where( articles.c.title.notlike('art_%') ) with engine.connect() as conn: res = conn.execute(stmt).scalars().all() print(res)

Результат выполнения кода:

['post one']

Пример

Давайте применим метод notlike в ORM-запросе к модели Article:

from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column class Base(DeclarativeBase): pass class Article(Base): __tablename__ = 'articles' id: Mapped[int] = mapped_column(primary_key=True) title: Mapped[str] text: Mapped[str] status: Mapped[str] num: Mapped[int]

Теперь выполним запрос, который вернет статьи, не содержащие слово user в заголовке:

from sqlalchemy import create_engine, select from sqlalchemy.orm import Session from models import Base, Article engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) with Session(engine) as session: session.add_all([ Article(title='article one', text='text 1', status='draft', num=1), Article(title='user guide', text='text 2', status='published', num=2), Article(title='sqlite notes', text='text 3', status='draft', num=3), ]) session.commit() with Session(engine) as session: stmt = select(Article.title).where( Article.title.notlike('%user%') ) res = session.execute(stmt).scalars().all() print(res)

Результат выполнения кода:

['article one', 'sqlite notes']

Пример

Давайте посмотрим итоговый SQL-запрос, который генерирует метод notlike:

from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, select engine = create_engine('sqlite:///:memory:') metadata = MetaData() articles = Table( 'articles', metadata, Column('id', Integer, primary_key=True), Column('title', String), Column('text', String), Column('status', String), Column('num', Integer), ) stmt = select(articles.c.title).where( articles.c.title.notlike('article%') ) print(stmt)

Итоговый SQL запрос:

SELECT articles.title FROM articles WHERE articles.title NOT LIKE :title_1

Смотрите также

  • метод like,
    который создает SQL-выражение LIKE
  • метод ilike,
    который создает регистронезависимое выражение LIKE
  • метод notilike,
    который создает регистронезависимое выражение NOT LIKE
  • класс ColumnElement,
    который представляет элемент колонки в SQLAlchemy
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить