DjangoでMigrateが通らない時に確認すること

この記事は約 6 分で読めます。

みなさんこんにちは!

ひろぽんです!

最近PythonのwebフレームワークDjangoで開発をしているのですが、たまーーーにMigrateが通らないことがあります。

そんな時に確認すべき事項を備忘録的な感じでまとめました!

Modelはしっかりと定義されているか?

まず問題の切り分けとして、Modelを最小構成でやってみるというのは有効な方法だと思います。

仮にどのようなテーブルがほしいとわかっていても、まずはミニマムでやってみる。

例えば以下のような構成でやってみましょう。

from django.db import models

class User(models..Model):
    name = models.CharField(max_kength = 1)

このコードは見てわかるとおり、めちゃくちゃミニマムです。

これでDjangoのMigrateが通らなければ、Modelの可能性は低いかと思います。

MySQLを接続DBとして使っている場合

MysqlをDjangoのDBに設定している場合は再度設定を確認してみましょう。

MysqlをDjangoのDBに設定する方法は以下の通りです。

pipでMYSQLをインストール

まずは、pipのinstallでMysqlをインストールします。

プロジェクト直下のフォルダで、下記コマンドを実行しましょう。

pip install PyMySQL

念の為プロジェクト直下フォルダとは、startprojectをしたときのフォルダです。

別の言い方をすると、manage.oyがおいているフォルダのことです。

manage.pyにMysqlを入れる

では続いて、manage.pyファイルにMysqlを入れていきましょう。

下記コードを追記します。

import pymysql

pymysql.install_as_MySQLdb()

こうすると、manage.pyファイルの中身は以下のようになります。

#!/usr/bin/env python
"""Django's command-line utility for administrative tasks."""
import os
import sys
import pymysql

pymysql.install_as_MySQLdb()

def main():
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'apitrest.settings')
    try:
        from django.core.management import execute_from_command_line
    except ImportError as exc:
        raise ImportError(
            "Couldn't import Django. Are you sure it's installed and "
            "available on your PYTHONPATH environment variable? Did you "
            "forget to activate a virtual environment?"
        ) from exc
    execute_from_command_line(sys.argv)


if __name__ == '__main__':
    main()

settings.pyのDB設定に反映させる

では最後にsettings.pyのDB設定にMysqlを追記します。

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'apitest',
        'HOST': '127.0.0.1',
        'USER': 'root',
        'PASSWORD': '',
        'PORT': '3306'
    }
}

設定すべきは、ENGINEの部分ここに

'django.db.backends.mysql'

と書きます。
その他は、DBの設定を見て入力していきましょう。

簡単に上から説明すると、

  • NAME ⇒ DBの名前
  • HOST ⇒ localhostとか、127.0.0.1とか
  • USER ⇒ DBにログインするためのユーザー名
  • PASSWORD ⇒ DBにログインするためのパスワード
  • PORT ⇒ DBに接続するためのPORT?空白でも行けるっぽい。。。

ここまでやって再度Migrateしてみましょう!

これでだめだったら最後の手段!

Djangoのバージョンを2.1にする。

最新のDjangoのバージョンは2019/11/8時点で、Django2.2.7です。

なので何も指定せずに

pip install django

ってしてしまうと、2.2.7がインストールされます。

ですが私が一回migrateに鬼ハマりしたとき、Djangoのバージョンが原因でMIGRATEが通らないという情報を得ました。

その後、Djangoのバージョンを2.1にしたところうまくMIGRATEが通りました。

Djangoのバージョンをしていしてインストールするには下記のようにします。

pip install Django==2.1

すでにDjangoの別バージョンが入っている場合でも、上記コマンドで勝手にバージョンダウンしてくれます。

これで再度Migrateしてみましょう!

さいごに

プログラミング学習をしていく上で、このようなプログラミング以外でのハマりって意外と多いものです。

ideの設定・仮想環境の設定・開発環境の作成等。。

そんなときにまず考えるべきは、最小構成でどのように動くのかということです。

最小構成で動いたのなら、そこからひとつ大きなところを追加して、再度実行。ってな感じで、どこがおかしいのか?という点を考えて行きます。

またそれで解決できない場合は、エラー文でググりましょう。

ググれば英語サイトでも、日本語サイトでも様々な情報が出てきます。

英語なんてクロームとか使っていれば、翻訳してくれますから、いかに情報を得るか?ということなんですね!

今後も色々ハマってハマってハマりまくると思いますが、その都度成長していると考えてがんばりましょう!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA