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

Метод drop_all

Метод drop_all класса MetaData удаляет все таблицы, которые связаны с данным объектом метаданных, из базы данных. Первым параметром метод принимает объект движка или соединения bind, через который выполняется удаление. Дополнительно можно передать параметр checkfirst, который перед удалением проверяет существование каждой таблицы, и параметр tables для указания конкретного списка таблиц. Метод выполняет SQL-команду DROP TABLE для каждой таблицы в порядке, обратном их созданию, чтобы корректно учитывать внешние ключи.

Синтаксис

MetaData.drop_all(bind, [tables], [checkfirst])

Пример

Давайте создадим объект MetaData с одной таблицей articles, создадим ее в базе, а затем удалим методом drop_all:

from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String 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) print(metadata.tables.keys()) metadata.drop_all(engine) print(metadata.tables.keys())

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

"dict_keys(['articles'])" "dict_keys(['articles'])"

Обратите внимание, что метод drop_all удаляет таблицы из базы данных, но сами объекты таблиц остаются в коллекции metadata.tables.

Пример

Давайте посмотрим, какой SQL-запрос выполняет метод drop_all, включив вывод запросов параметром echo:

from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String engine = create_engine('sqlite:///:memory:', echo=True) metadata = MetaData() articles = Table( 'articles', metadata, Column('id', Integer, primary_key=True), Column('title', String), ) metadata.create_all(engine) metadata.drop_all(engine)

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

DROP TABLE articles

Пример

Давайте передадим параметр checkfirst=True, чтобы метод проверил существование таблиц перед удалением:

from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String engine = create_engine('sqlite:///:memory:') metadata = MetaData() articles = Table( 'articles', metadata, Column('id', Integer, primary_key=True), Column('title', String), Column('text', String), ) metadata.drop_all(engine, checkfirst=True) print("drop_all completed")

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

"drop_all completed"

С параметром checkfirst=True метод не выбросит исключение, даже если таблицы еще не существуют в базе данных.

Пример

Давайте удалим только определенные таблицы, передав их список в параметр tables:

from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String engine = create_engine('sqlite:///:memory:') metadata = MetaData() articles = Table( 'articles', metadata, Column('id', Integer, primary_key=True), Column('title', String), ) users = Table( 'users', metadata, Column('id', Integer, primary_key=True), Column('name', String), ) metadata.create_all(engine) print(list(metadata.tables.keys())) metadata.drop_all(engine, tables=[articles]) print(list(metadata.tables.keys()))

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

['articles', 'users'] ['articles', 'users']

В данном примере из базы данных удаляется только таблица articles, а таблица users остается нетронутой.

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

  • класс MetaData,
    который хранит информацию о таблицах
  • метод create_all,
    который создает все таблицы в базе данных
  • атрибут tables,
    который хранит словарь всех таблиц метаданных
  • метод clear,
    который очищает коллекцию таблиц метаданных
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить