Djangoでデータベースの移行を行うと、Tableが存在しない、という旨のエラーが出ることがあります。
「移行なんだから、データベース本体はあってもテーブルなんかあるわけないだろ!」
みたいな感じなのですが、意外なところで解決できたので情報提供です。
同じようなエラーで悩んでいる人はぜひとも参考にしてください。
データ移行でのdjango.db.utils.ProgrammingError: (1146, “Table ” doesn’t exist”)エラー対処法
エラー解決の結論を述べてしまうと
移行前のデータベースをmigrateで削除する
ということになります。
上記を行えばエラーは消えますが、詳細を知りたい場合は読み進めてください。
テーブルが存在しないエラーが出る原因について
そもそもなぜこのエラーがでるのかという話になるのですが、migrateと実際のDBが一致していないのが原因です。
Djangoなどの、migrateを必要とするフレームワークにおいては、合わせるのが基本となります。
このエラーに関してですが、例えば手動で実際のDBのテーブルを削除した場合も発生します。
migrationにはDBがあるのに、実際のDBには存在しないからですね。
まあ、ならmigrateと実際のDBが違うというエラーを出力してくれよという話ですが……
ということを前提として考えると移行の際にエラーが発生するのも頷けますね。
つまり、migrate上ではテーブルがあるのに、移行後のDBにはテーブルがないからエラーになるのです。
そのため、migrate上でテーブルをすべて削除する必要があります。
もちろん移行前のデータはdumpなどをして取得していると思うので、バックアップ前提です。
削除する際のmodelsファイルも念のためにバックアップを取っておくと良いですね。
前のDBテーブルをmigrate経由で完全削除しよう。
元のDBに接続した状態でテーブルの削除を行えば、その後に新DBに接続してmigrateすることでテーブルが作成されます。
ここは新規のテーブル作成と同じですね。
テーブルさえ作ってしまえばあとはデータを移行しましょう。