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

Функция delete

Функция delete создает объект Delete, который представляет SQL-выражение DELETE. Первым параметром функция принимает таблицу или ORM-сущность, из которой нужно удалить записи. Дополнительно можно передать условие where для выбора удаляемых строк. Если условие не указано, будут удалены все записи таблицы.

Функция возвращает объект, который можно выполнить через соединение или сессию. При выполнении возвращается результат с количеством удаленных строк в атрибуте rowcount.

Синтаксис

delete(table) delete(table).where(condition)

Пример

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

<+python+> from sqlalchemy import create_engine, Table, Column, Integer, String, MetaData, delete 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 1', 'text': 'text 1', 'status': 'draft', 'num': 1}, {'title': 'article 2', 'text': 'text 2', 'status': 'published', 'num': 2}, ]) with engine.begin() as conn: res = conn.execute(delete(articles)) print(res.rowcount) <-python+>

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

<+python+> 2 <-python+>

Пример

Давайте удалим только те записи, у которых статус равен draft, с помощью метода where:

<+python+> from sqlalchemy import create_engine, Table, Column, Integer, String, MetaData, delete 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 1', 'text': 'text 1', 'status': 'draft', 'num': 1}, {'title': 'article 2', 'text': 'text 2', 'status': 'published', 'num': 2}, {'title': 'article 3', 'text': 'text 3', 'status': 'draft', 'num': 3}, ]) with engine.begin() as conn: stmt = delete(articles).where(articles.c.status == 'draft') res = conn.execute(stmt) print(res.rowcount) <-python+>

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

<+python+> 2 <-python+>

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

<+sql+> DELETE FROM articles WHERE articles.status = 'draft' <-sql+>

Пример

Давайте удалим запись по конкретному идентификатору:

<+python+> from sqlalchemy import create_engine, Table, Column, Integer, String, MetaData, delete 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(), [ {'id': 1, 'title': 'article 1', 'text': 'text 1', 'status': 'draft', 'num': 1}, {'id': 2, 'title': 'article 2', 'text': 'text 2', 'status': 'published', 'num': 2}, ]) with engine.begin() as conn: stmt = delete(articles).where(articles.c.id == 1) res = conn.execute(stmt) print(res.rowcount) <-python+>

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

<+python+> 1 <-python+>

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

<+sql+> DELETE FROM articles WHERE articles.id = 1 <-sql+>

Пример

Давайте удалим записи с помощью ORM-сессии, передав в функцию delete ORM-класс:

<+python+> from sqlalchemy import create_engine, Integer, String from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, Session from sqlalchemy import delete 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] 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='draft', num=1), Article(title='article 2', text='text 2', status='published', num=2), Article(title='article 3', text='text 3', status='draft', num=3), ]) session.commit() with Session(engine) as session: stmt = delete(Article).where(Article.status == 'published') res = session.execute(stmt) session.commit() print(res.rowcount) <-python+>

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

<+python+> 1 <-python+>

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

<+sql+> DELETE FROM articles WHERE articles.status = 'published' <-sql+>

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

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