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

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


### データベースを変更してぶっ壊した
あれ、ここのモデル構図違うじゃんとなり、色々とモデルを修正していたらこうなってしまった。

```
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
```

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

### 参考サイト
https://hk-software.hatenablog.com/entry/2022/12/25/194032

https://kosuke-space.com/django-migration-reset