Я использую peewee на heroku, но, согласно документации peewee, удаление связанных таблиц должно выполняться в коде.
Вопрос как?
У меня есть следующие модели
class WebPage(Model):
title = CharField()
class Term(Model):
name = CharField()
class WebPageTerms(Model):
term = ForeignKeyField(Term)
webpage = ForeignKeyField(WebPage)
Метод удаления таблицы, включающий пользовательский оператор postgresql:
def drop_tables():
WebPage.drop_table(fail_silently=True)
Term.drop_table(fail_silently=True)
WebPageTerms.drop_table(fail_silently=True)
как часть развертывания я удаляю все таблицы и создаю их, чтобы добавить новые поля.
Я пробовал следующий подход, но он все еще не работает:
conn = psycopg2.connect("dbname='' user='' host='' password=''")
curr = conn.cursor()
curr.execute("DROP table webpageterms CASCADE")
curr.execute("DROP table webpage CASCADE")
curr.close()
conn.close()
но я продолжаю получать ту же ошибку
psycopg2.InternalError: невозможно удалить веб-страницу таблицы, поскольку от нее зависят другие объекты. ПОДРОБНЕЕ: ограничение webpageterms_webpage_id_fkey для терминов веб-страницы таблицы зависит от веб-страницы таблицы. СОВЕТ: используйте DROP ... CASCADE, чтобы также удалить зависимые объекты.
как я могу удалить эти таблицы?
** РЕДАКТИРОВАТЬ ** Пытался изменить код на:
curr.execute("ALTER TABLE webpageterms DROP CONSTRAINT webpageterms_webpage_id_fkey")
но я получаю:
psycopg2.InternalError: cannot drop table webpage because other objects depend on it
DETAIL: constraint webpageterms_webpage_id_fkey on table webpageterms depends on table webpage
HINT: Use DROP ... CASCADE to drop the dependent objects too.