Различные опции не в состоянии отбрасывать таблицы базы данных с помощью sqlalchemy - PullRequest
0 голосов
/ 03 марта 2020

Я пытаюсь реализовать функцию, которая удаляет все мои таблицы базы данных в 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, ни один из них не работал. Помогите пожалуйста!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...