1

私はherokuでpeeweeを使用していますが、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: 他のオブジェクトがそれに依存しているため、テーブル Web ページを削除できません 詳細: テーブル webpageterms の制約 webpageterms_webpage_id_fkey は、テーブル Web ページに依存します ヒント: 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.
4

2 に答える 2

0

最初に外部キーの制約を削除してみてください。

ALTER TABLE "webpageterms" DROP CONSTRAINT "webpageterms_webpage_id_fkey"

および(ここでは外部キーの正確な名前はわかりませんが、リストされていないためです)

ALTER TABLE "webpageterms" DROP CONSTRAINT "webpageterms_term_id_fkey"

于 2013-04-28T16:12:07.100 に答える