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

Метод is_not_distinct_from

Метод is_not_distinct_from класса ColumnElement создает SQL-выражение для сравнения двух значений на «не различность» (IS NOT DISTINCT FROM). В отличие от обычного оператора равенства ==, этот метод корректно обрабатывает значения NULL: два NULL считаются не различными, а NULL и любое другое значение - различными. Метод принимает один обязательный параметр - значение или выражение ColumnElement, с которым выполняется сравнение. Возвращает объект BinaryExpression, пригодный для использования в условиях WHERE.

Синтаксис

column_element.is_not_distinct_from(other)

Пример

Давайте создадим таблицу статей и применим метод is_not_distinct_from для сравнения значения колонки с числом:

from sqlalchemy import create_engine, Column, Integer, String, select from sqlalchemy.orm import DeclarativeBase, Session class Base(DeclarativeBase): pass class Article(Base): __tablename__ = 'articles' id = Column(Integer, primary_key=True) title = Column(String) text = Column(String) status = Column(String) num = Column(Integer) engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) with Session(engine) as session: session.add_all([ Article(title='article 1', text='text 1', status='new', num=10), Article(title='article 2', text='text 2', status='old', num=None), Article(title='article 3', text='text 3', status='new', num=20), ]) session.commit() stmt = select(Article.title).where( Article.num.is_not_distinct_from(10) ) res = session.execute(stmt).scalars().all() print(res)

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

['article 1']

Пример

Теперь сравним колонку с None, чтобы показать обработку значений NULL:

from sqlalchemy import create_engine, Column, Integer, String, select from sqlalchemy.orm import DeclarativeBase, Session class Base(DeclarativeBase): pass class Article(Base): __tablename__ = 'articles' id = Column(Integer, primary_key=True) title = Column(String) text = Column(String) status = Column(String) num = Column(Integer) engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) with Session(engine) as session: session.add_all([ Article(title='article 1', text='text 1', status='new', num=10), Article(title='article 2', text='text 2', status='old', num=None), Article(title='article 3', text='text 3', status='new', num=20), ]) session.commit() stmt = select(Article.title).where( Article.num.is_not_distinct_from(None) ) res = session.execute(stmt).scalars().all() print(res)

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

['article 2']

Пример

Сравнение двух колонок между собой с помощью is_not_distinct_from:

from sqlalchemy import create_engine, Column, Integer, String, select from sqlalchemy.orm import DeclarativeBase, Session class Base(DeclarativeBase): pass class Article(Base): __tablename__ = 'articles' id = Column(Integer, primary_key=True) title = Column(String) text = Column(String) status = Column(String) num = Column(Integer) engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) with Session(engine) as session: session.add_all([ Article(title='article', text='article', status='new', num=10), Article(title='article', text='sqlite', status='old', num=20), ]) session.commit() stmt = select(Article.id).where( Article.title.is_not_distinct_from(Article.text) ) res = session.execute(stmt).scalars().all() print(res)

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

[1]

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

  • класс ColumnElement,
    который представляет элемент SQL-выражения
  • метод is_distinct_from,
    который выполняет обратное сравнение на различность
  • метод is_,
    который сравнивает выражение с NULL или True/False
  • метод is_not,
    который выполняет отрицательное сравнение с NULL
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить