0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Djangoでのsqlite3データベースをリセット方法

Posted at

作成しようとしたきっかけ

何度もデータベースをぶっ壊すようなことをしてきたため、そろそろ自分なりに解決方法をまとめないと忘れるなと思ったので、記事としてまとめます。

データベースを変更してぶっ壊した

あれ、ここのモデル構図違うじゃんとなり、色々とモデルを修正していたらこうなってしまった。

admin
 [X] 0001_initial
 [X] 0002_logentry_remove_auto_add
 [X] 0003_logentry_add_action_flag_choices
auth
 [X] 0001_initial
 [X] 0002_alter_permission_name_max_length
 [X] 0003_alter_user_email_max_length
 [X] 0004_alter_user_username_opts
 [X] 0005_alter_user_last_login_null
 [X] 0006_require_contenttypes_0002
 [X] 0007_alter_validators_add_error_messages
 [X] 0008_alter_user_username_max_length
 [X] 0009_alter_user_last_name_max_length
 [X] 0010_alter_group_name_max_length
 [X] 0011_update_proxy_permissions
 [X] 0012_alter_user_first_name_max_length
blog
 [X] 0001_initial
 [X] 0002_comment
 [X] 0003_article_count
 [X] 0004_alter_article_options_alter_comment_options_and_more
 [X] 0005_alter_articlelike_options_remove_articlelike_count
 [X] 0006_alter_articlelike_article
 [X] 0007_alter_comment_article_articletag
 [X] 0008_remove_articletag_article_article_tags
 [X] 0009_alter_articletag_slug
 [ ] 0010_alter_article_author #こいつだけXがない!
contenttypes
 [X] 0001_initial
 [X] 0002_remove_content_type_name
mysite
 [X] 0001_initial
 [X] 0002_profile
 [X] 0003_profile_image
sessions
 [X] 0001_initial

やってしまった・・・とほほ
色々試したが初心者の自分では修正が無理そうだったので、もうデータベースごと初期化してしまえ!!!ってなりました。

個人開発なら全然いいのですが、チーム開発や仕事でデータベースを管理している方は今回説明する方法は行わないでください。

データベースを初期化する手順

1.SQLite3データベースに接続

sqlite3 db.sqlite3

2.既存のテーブルを削除

DROP TABLE IF EXISTS django_migrations;
DROP TABLE IF EXISTS django_content_type;
DROP TABLE IF EXISTS auth_permission;
DROP TABLE IF EXISTS auth_group;
DROP TABLE IF EXISTS auth_group_permissions;
DROP TABLE IF EXISTS auth_user;
DROP TABLE IF EXISTS auth_user_groups;
DROP TABLE IF EXISTS auth_user_user_permissions;
DROP TABLE IF EXISTS account_emailaddress;
DROP TABLE IF EXISTS account_emailconfirmation;
DROP TABLE IF EXISTS django_admin_log;
DROP TABLE IF EXISTS django_session;
DROP TABLE IF EXISTS django_site;
DROP TABLE IF EXISTS socialaccount_socialaccount;
DROP TABLE IF EXISTS socialaccount_socialapp;
DROP TABLE IF EXISTS socialaccount_socialapp_sites;
DROP TABLE IF EXISTS socialaccount_socialtoken;

そしたら.extiでsqlite3から抜け出します。

3.マイグレーションの確認

python3 manage.py showmigrations

## 結果 ##
admin
 [ ] 0001_initial
 [ ] 0002_logentry_remove_auto_add
 [ ] 0003_logentry_add_action_flag_choices
auth
 [ ] 0001_initial
 [ ] 0002_alter_permission_name_max_length
 [ ] 0003_alter_user_email_max_length
 [ ] 0004_alter_user_username_opts
 [ ] 0005_alter_user_last_login_null
 [ ] 0006_require_contenttypes_0002
 [ ] 0007_alter_validators_add_error_messages
 [ ] 0008_alter_user_username_max_length
 [ ] 0009_alter_user_last_name_max_length
 [ ] 0010_alter_group_name_max_length
 [ ] 0011_update_proxy_permissions
 [ ] 0012_alter_user_first_name_max_length
blog
 [ ] 0001_initial
 [ ] 0002_comment
 [ ] 0003_article_count
 [ ] 0004_alter_article_options_alter_comment_options_and_more
 [ ] 0005_alter_articlelike_options_remove_articlelike_count
 [ ] 0006_alter_articlelike_article
 [ ] 0007_alter_comment_article_articletag
 [ ] 0008_remove_articletag_article_article_tags
 [ ] 0009_alter_articletag_slug
 [ ] 0010_alter_article_author
 [ ] 0011_remove_article_author
contenttypes
 [ ] 0001_initial
 [ ] 0002_remove_content_type_name
mysite
 [ ] 0001_initial
 [ ] 0002_profile
 [ ] 0003_profile_image
sessions
 [ ] 0001_initial

すっからかんになりました笑

db.sqlite3ファイルも削除します。

rm db.sqlite3

次に各アプリそれぞれのmigrationファイルをすべて削除します。
この時に__init__.pyを消さないように注意してください。
消してしまったら再度同じところに作成すればOKです。

以下のコマンドでmigrationファイルを削除していきます。
app名には各アプリケーション名を入れてください。

rm app名/migrations/0*.py

これで各ファイルのmigrationファイルを削除できました。

続いて、adminに関連する箇所をコメントアウトしていきます。
なぜこれが必要かというと、カスタムユーザを作成する前にmigrateすると、すでにあるDjangoのデフォルトのadminユーザのModelとカスタムユーザのModelが衝突を避けるためです。

admin関係をコメントアウトしたらmakemigrationsを実行します。

python manage.py makemigrations

以下のようにadmin以外の部分にXが付きました。

admin
 [ ] 0001_initial
 [ ] 0002_logentry_remove_auto_add
 [ ] 0003_logentry_add_action_flag_choices
auth
 [X] 0001_initial
 [X] 0002_alter_permission_name_max_length
 [X] 0003_alter_user_email_max_length
 [X] 0004_alter_user_username_opts
 [X] 0005_alter_user_last_login_null
 [X] 0006_require_contenttypes_0002
 [X] 0007_alter_validators_add_error_messages
 [X] 0008_alter_user_username_max_length
 [X] 0009_alter_user_last_name_max_length
 [X] 0010_alter_group_name_max_length
 [X] 0011_update_proxy_permissions
 [X] 0012_alter_user_first_name_max_length
blog
 [X] 0001_initial
contenttypes
 [X] 0001_initial
 [X] 0002_remove_content_type_name
mysite
 [X] 0001_initial
sessions
 [X] 0001_initial

続いてmigrateを実行します。

python manage.py migrate

adminにもXが付きました。

admin
 [X] 0001_initial
 [X] 0002_logentry_remove_auto_add
 [X] 0003_logentry_add_action_flag_choices
auth
 [X] 0001_initial
 [X] 0002_alter_permission_name_max_length
 [X] 0003_alter_user_email_max_length
 [X] 0004_alter_user_username_opts
 [X] 0005_alter_user_last_login_null
 [X] 0006_require_contenttypes_0002
 [X] 0007_alter_validators_add_error_messages
 [X] 0008_alter_user_username_max_length
 [X] 0009_alter_user_last_name_max_length
 [X] 0010_alter_group_name_max_length
 [X] 0011_update_proxy_permissions
 [X] 0012_alter_user_first_name_max_length
blog
 [X] 0001_initial
contenttypes
 [X] 0001_initial
 [X] 0002_remove_content_type_name
mysite
 [X] 0001_initial
sessions
 [X] 0001_initial

無事データベースを再起動することができました!!

参考サイト

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?