スポンサードリンク



こんにちは。sinyです。

この記事では、Django環境でテーブルを削除する際の手順についてまとめました。

実際、実務で開発をしていてテーブルを実装したものの不要になったのですが、テーブルを削除する際の手順がよくわからず試行錯誤して成功した際の手順です。

前提環境

以下のような3つのテーブルクラス(3つのテーブルを作成済み)を実装しているものとし、Userテーブルクラスが不要になったため、Userテーブルを削除するというケースで説明します。

※対象アプリケーション名は「kakeibo」、データベースはSqlite3とします。

 

まずはmakemigrationsコマンドで変更がない状態であることを確認しておきます。

No changes detected」と表示されればOKです。

 

現状のMigrations履歴を確認します。

 

Migrations履歴を削除します。

 

再度Migrations履歴を確認して[X] →[ ]に変わっていることを確認します。

 

Migrationsファイルを削除します。

<アプリケーション名>\migrations配下の__init__.py以外のマイグレーションファイル(xxxx.py)を削除します。

再度Migrations履歴を確認して(no migrations)と表示されることを確認します。

 

不要になったテーブルを削除します。
今回はSqlite3なので、以下のようにdbshellでデータベース接続した後に「drop table kakeibo_user;コマンドで不要なテーブルをドロップします。

※他のデータベースの場合は、データベースに対応しているテーブルのDropコマンドを実行すればOK.

 

削除したkakeibo_userテーブルに関する設定をmodels.py、admin.pyなどから削除しておきます。

新たにMigrationsを作成します。

 

既にデータベースのテーブルは作成されているためfakeコマンドを使ってmigrateを実行します。

 

Migrations履歴を確認し、以下のように初期マイグレーションファイル「0001_initial」が生成されていることを確認します。

 

対象アプリケーションに対してmakemigrationsを実行し、No changes detectedであることを確認します。

 

python manage.py runserverでエラーがなく、アプリケーションに問題なくアクセスできることを確認します。

以上で不要なテーブルの削除が完了し、Djangoとしてもエラーがない状態になりました。

もっと良い方法などがあれば、問合せサイトTwitterから教えていただけると幸いです。

おすすめの記事