Метод is_
Метод is_ класса ColumnElement создает
SQL-выражение для проверки на идентичность.
Чаще всего применяется для сравнения значения
столбца с NULL, а также с булевыми
значениями True и False. Первым
параметром метод принимает значение, с которым
сравнивается элемент. Метод возвращает объект
BinaryExpression, который можно
использовать в конструкции where.
Синтаксис
column.is_(other)
Пример
Давайте создадим таблицу articles
и выберем строки, у которых столбец text
равен NULL:
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),
)
metadata.create_all(engine)
stmt = select(articles.c.title).where(articles.c.text.is_(None))
print(stmt)
Итоговый SQL запрос:
SELECT articles.title
FROM articles
WHERE articles.text IS NULL
Пример
Давайте сравним булевый столбец status
со значением True:
from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, Boolean, select
engine = create_engine('sqlite:///:memory:')
metadata = MetaData()
articles = Table(
'articles', metadata,
Column('id', Integer, primary_key=True),
Column('title', String),
Column('status', Boolean),
)
metadata.create_all(engine)
stmt = select(articles.c.title).where(articles.c.status.is_(True))
print(stmt)
Итоговый SQL запрос:
SELECT articles.title
FROM articles
WHERE articles.status IS 1
Пример
Давайте выполним запрос к базе и получим список заголовков, у которых текст не задан:
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),
)
metadata.create_all(engine)
with engine.begin() as conn:
conn.execute(articles.insert(), [
{'title': 'article 1', 'text': 'sqlite'},
{'title': 'article 2', 'text': None},
{'title': 'article 3', 'text': None},
])
stmt = select(articles.c.title).where(articles.c.text.is_(None))
with engine.connect() as conn:
res = conn.execute(stmt).scalars().all()
print(res)
Результат выполнения кода:
['article 2', 'article 3']
Смотрите также
-
класс
ColumnElement,
который представляет элемент столбца -
метод
is_not,
который проверяет значение на неравенство с NULL -
метод
in_,
который проверяет вхождение значения в список -
метод
is_distinct_from,
который сравнивает значения с учетом NULL