Self-Curation

新卒社会人で営業マンになりました

【Django】no such tableのエラー

f:id:scuration:20200607213312p:plain

こんにちは

今日はDjangoで以下のような「no such table」のエラーが出たときの解決法について書かせていただきます。
忘備録も兼ねて。

f:id:scuration:20200615212411p:plain


【目次】

エラーが出た経緯

Pythonをインストールして、出来るだけWEBアプリに近い状態から始めたいのでDjangoを弄ってる最中です。

あるページを参考に簡単な投稿フォームアプリを作成しておりました。

しかし指示通りにコードを埋めたにも関わらず、ローカルサーバーで実行すると以下のようなエラーページが出たのです。

f:id:scuration:20200615212411p:plain

プロジェクト、もしくはアプリで不正・無効の記述があるとき、本来であればサーバーで実行する前にエラーが出るはずななんですけど何も起こりませんでした。

原因の模索

Exception Location:	c:\Python\django\lib\site-packages\django\db\backends\sqlite3\base.py in execute, line 396



まずこちらの記述をもとにbase.pyの396行目を確認しました。

return Database.Cursor.execute(self, query, params)



しかしこのような記述があるだけで特におかしいと思われる箇所はないのです。

それでネットで「no such table」のエラーを調べると、海外フォーラムで同じ悩みを持った人の投稿を見つけました。

python - Django - No such table: main.auth_user__old - Stack Overflow

解決策を日本語に翻訳すると以下のように

次の手順を維持することで、この問題を簡単に解消できます。

djangoバージョン2.1.5を維持(このバージョンで対処された問題) pip install django==2.1.5

SQLiteデータベースを削除する

③再び移行しpython manage.py makemigrationsた後、python manage.py migrate

④サーバーを起動する python manage.py runserver
やった!


要はデータベースのバージョンに関するエラーだったようです。

エラー解決!

結論から言うとpipのバージョンを上げれば解決できました。

まず解決手順①でpipのバージョンを調査。

(django) C:\Python\…>pip install django
Requirement already satisfied: django in c:\python\django\lib\site-packages (3.0.6)
Requirement already satisfied: pytz in c:\python\django\lib\site-packages (from django) (2020.1)
Requirement already satisfied: sqlparse>=0.2.2 in c:\python\django\lib\site-packages (from django) (0.3.1)
Requirement already satisfied: asgiref~=3.2 in c:\python\django\lib\site-packages (from django) (3.2.7)
WARNING: You are using pip version 19.2.3, however version 20.1.1 is available.
You should consider upgrading via the 'python -m pip install --upgrade pip' command.

あなたのpipのバージョンは19.2.3ですけど、バージョン20.1.1が入手可能です。
python -m pip install --upgrade pip」コマンドでアップグレードしてください。

と、表示されましたので大人しくpipのバージョンを上げます。

(django) C:\Python\django…>python -m pip install --upgrade pip
…
Successfully installed pip-20.1.1

次にmakemigrationsを実行します。
makemigrationsとは文字通りマイグレーションファイルを作成するコマンドです。

さらに言うとマイグレーションファイルというのはmodelの変更をデータベースに反映させるためのものです。

そもそも「no such table」のエラーを解決していたのですけども、やはりデータベース関連のエラーだと分かりますね。

(django) C:\Python\django…>python manage.py makemigrations
Migrations for '〇〇〇app':
  〇〇〇app\migrations\0001_initial.py
    - Create model PostModel

あとは「python mange.py migrate」を実行すれば無事アプリを起動することができました。

(django) C:\Python…python manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
  No migrations to apply.
  Your models have changes that are not yet reflected in a migration, and so won't be applied.
  Run 'manage.py makemigrations' to make new migrations, and then re-run 'manage.py migrate' to apply them.