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