Я пытаюсь реализовать функцию, которая удаляет все мои таблицы базы данных в sqlalchemy Python.
Мой ожидаемый результат - чистая база данных, эквивалентная переходу в мой MySQL Workbench, выбрав все 3 таблицы в моей базе данных и нажав «Удалить 3 таблицы».
Вот что я пробовал:
(1)
from sqlalchemy import MetaData
from sqlalchemy import create_engine
engine = create_engine('mysql://root:password@localhost:3306/scrapes?charset=utf8', echo=False)
meta = MetaData()
meta.bind = engine
meta.drop_all()
Результат: ничего не происходит. Моя база данных остается прежней.
(2)
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
Base.metadata.drop_all()
Результат: "sqlalchemy.ex c .UnboundExecutionError: Объект MetaData не связан с Engine или Connection. Выполнение не может продолжить без базы данных для выполнения. "
(3)
# This worked a few days ago, I think
Base = declarative_base(bind=engine)
Base.metadata.drop_all()
Результат: ничего не происходит!
(4)
tables = Base.metadata.sorted_tables
for table in tables:
engine.execute(table.delete())
Результат: "sqlalchemy.ex c .IntegrityError: (MySQLdb._exceptions.IntegrityError) (1451, 'Невозможно удалить или обновить родительскую строку: ограничение внешнего ключа не выполняется (scrapes
. page
, CONSTRAINT page_ibfk_1
FOREIGN КЛЮЧ (parent_id
) ССЫЛКИ query
(id
)) ') [SQL: УДАЛЕНИЕ ИЗ запроса] "
Примечание. Недавно я изменил один столбец в один классов, определяющих мои таблицы. Может быть, это как-то связано с этим. Я просто добавил created_date = Column(DateTime, server_default=func.now())
Теперь я уверен, что могу просто отбросить таблицы из своего рабочего места, но я хочу сделать это программно , чтобы я мог дать команду своему серверу сделать это с моего внешнего интерфейса с помощью щелчок кнопки.
Будет ли один из этих вариантов работать с небольшой модификацией? Я тоже тестировал drop tables from workbench -> recreate tables using new definitions -> attempt to drop tables again
, ни один из них не работал. Помогите пожалуйста!