DjangoのデフォルトDBは、SQLite3です。MySQLやPostgreSQLを使用する場合は、DBの設定を変更する必要があります。
settings.py
データベースの設定は、settings.pyの以下の部分になります。 デフォルトでは SQLite3 になっています。
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), } }
必要バージョン以上のSQLite3が使える環境だと、設定の変更などの作業はありません。 SQLite3が無い場合はインストールする必要があります。
DB接続テスト
DB接続のテストはマイグレーションで行うことが可能です。 コマンドは以下になります。
python manage.py migrate
マイグレーションが正常に実行されると以下のようになります。
$ python manage.py migrate Operations to perform: Apply all migrations: auth, admin, contenttypes, sessions Running migrations: Rendering model states... DONE Applying contenttypes.0001_initial... OK Applying auth.0001_initial... OK Applying admin.0001_initial... OK Applying admin.0002_logentry_remove_auto_add... OK Applying contenttypes.0002_remove_content_type_name... OK Applying auth.0002_alter_permission_name_max_length... OK Applying auth.0003_alter_user_email_max_length... OK Applying auth.0004_alter_user_username_opts... OK Applying auth.0005_alter_user_last_login_null... OK Applying auth.0006_require_contenttypes_0002... OK Applying auth.0007_alter_validators_add_error_messages... OK Applying sessions.0001_initial... OK
SQLite3
DjangoのデフォルトDBはSQLite3で、設定は以下のようになっています。 SQLite3がインストールされていれば、設定の変更は必要ありません。
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), } }
バージョンエラー
以下のようなエラーの場合、SQLite3が必要なバージョン 3.8.3 より低い3.7.11なので、、SQLite3をバージョン 3.8.3以上にする必要があります。
$ python manage.py migrate Traceback (most recent call last): File "manage.py", line 21, in <module> main() ・・・ ・・・ raise ImproperlyConfigured('SQLite 3.8.3 or later is required (found %s).' % Database.sqlite_version) django.core.exceptions.ImproperlyConfigured: SQLite 3.8.3 or later is required (found 3.7.17).
MySQL
MySQLを使用する場合、settings.pyで以下のように設定します。
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'データベース名', 'USER': 'ユーザー名', 'PASSWORD': 'パスワード', 'HOST': 'DBのホスト名' 'PORT': 'DBのポート番号6', } }
ローカルのDBへ接続して、DB名"mysite"、DBへの接続ユーザー"root"、パスワード無しの場合、以下のようにします。
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'mysite', # データベース名 'USER': 'root', # ユーザー名 'PASSWORD': 'pass', # パスワード 'HOST': 'localhost', # DBのホスト名 } }
データベースが無い場合、データベースを作成しておきます。 データベース名が "mysite" の場合、以下を実行して作成します。
echo "create databae mysite" | mysql -u root
マイグレーションで接続テストを行います。正常の場合、以下のようにマイグレーションが実行されます。
$ python manage.py migrate System check identified some issues: WARNINGS: ?: (mysql.W002) MySQL Strict Mode is not set for database connection 'default' HINT: MySQL's Strict Mode fixes many data integrity problems in MySQL, such as data truncation upon insertion, by escalating warnings into errors. It is strongly recommended you activate it. See: https://docs.djangoproject.com/en/2.2/ref/databases/#mysql-sql-mode Operations to perform: Apply all migrations: admin, auth, contenttypes, sessions Running migrations: Applying contenttypes.0001_initial... OK Applying auth.0001_initial... OK Applying admin.0001_initial... OK Applying admin.0002_logentry_remove_auto_add... OK Applying admin.0003_logentry_add_action_flag_choices... OK Applying contenttypes.0002_remove_content_type_name... OK Applying auth.0002_alter_permission_name_max_length... OK Applying auth.0003_alter_user_email_max_length... OK Applying auth.0004_alter_user_username_opts... OK Applying auth.0005_alter_user_last_login_null... OK Applying auth.0006_require_contenttypes_0002... OK Applying auth.0007_alter_validators_add_error_messages... OK Applying auth.0008_alter_user_username_max_length... OK Applying auth.0009_alter_user_last_name_max_length... OK Applying auth.0010_alter_group_name_max_length... OK Applying auth.0011_update_proxy_permissions... OK Applying sessions.0001_initial... OK
設定エラー
以下のようなエラーの場合、DB設定のDB名、ユーザー、パスワードなどに間違いが無いか確認し、あれば修正します。
$ python manage.py migrate Traceback (most recent call last): ... ... super(Connection, self).__init__(*args, **kwargs2) django.db.utils.OperationalError: (1044, "Access denied for user ''@'localhost' to database 'mysite'")
mysqlclientエラー
以下のようなエラーの場合、pythonのmysqlclientモジュールがインストールされていません。
$ python manage.py migrate Traceback (most recent call last): ... ... django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module. Did you install mysqlclient?
以下のようにmysqlclientモジュールをインストールします。
$ pip install mysqlclient Collecting mysqlclient Using cached https://files.pythonhosted.org/packages/f4/f1/3bb6f64ca7a429729413e6556b7ba5976df06019a5245a43d36032f1061e/mysqlclient-1.4.2.post1.tar.gz Installing collected packages: mysqlclient Running setup.py install for mysqlclient ... done Successfully installed mysqlclient-1.4.2.post1