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

Функция exists

Функция exists создает SQL-выражение EXISTS, которое проверяет, возвращает ли подзапрос хотя бы одну строку. Функция принимает первым параметром выражение запроса или подзапрос. Результатом является булево значение: True, если подзапрос вернул хотя бы одну строку, и False в противном случае.

Функция часто используется в конструкциях WHERE и HAVING для фильтрации основного запроса по наличию связанных данных.

Синтаксис

exists(select_stmt)

Пример

Давайте создадим таблицу articles и проверим, существуют ли в ней статьи:

from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, select, exists engine = create_engine('sqlite:///:memory:') metadata = MetaData() articles = Table( 'articles', metadata, Column('id', Integer, primary_key=True), Column('title', String), Column('status', String), ) metadata.create_all(engine) with engine.connect() as conn: stmt = select(exists().where(articles.c.status == 'published')) res = conn.execute(stmt).scalar() print(res)

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

False

Пример

Давайте добавим статью и снова проверим существование:

from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, insert, select, exists engine = create_engine('sqlite:///:memory:') metadata = MetaData() articles = Table( 'articles', metadata, Column('id', Integer, primary_key=True), Column('title', String), Column('status', String), ) metadata.create_all(engine) with engine.connect() as conn: conn.execute(insert(articles).values(title='article', status='published')) conn.commit() stmt = select(exists().where(articles.c.status == 'published')) res = conn.execute(stmt).scalar() print(res)

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

True

Пример

Давайте используем exists в атрибуте where основного запроса для фильтрации:

from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, insert, select, exists engine = create_engine('sqlite:///:memory:') metadata = MetaData() articles = Table( 'articles', metadata, Column('id', Integer, primary_key=True), Column('title', String), Column('status', String), ) metadata.create_all(engine) with engine.connect() as conn: conn.execute(insert(articles), [ {'title': 'article 1', 'status': 'published'}, {'title': 'article 2', 'status': 'draft'}, ]) conn.commit() subq = select(articles.c.id).where(articles.c.status == 'draft') stmt = select(articles.c.title).where(exists(subq)) res = conn.execute(stmt).fetchall() print(res)

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

[('article 1',), ('article 2',)]

Пример

Давайте посмотрим итоговый SQL-запрос, который генерирует функция exists:

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

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

SELECT articles.title FROM articles WHERE EXISTS (SELECT articles.id FROM articles WHERE articles.status = :status_1)

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

  • функцию select,
    которая создает SELECT-запрос
  • функцию insert,
    которая создает INSERT-запрос
  • функцию update,
    которая создает UPDATE-запрос
  • функцию delete,
    которая создает DELETE-запрос
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить