1-2. データベースへの接続準備

今回のテーマは「データベース接続準備」です。DjangoのデータベースはデフォルトではSQLiteです。もしSQLiteを使う想定の場合は本記事の内容は飛ばして結構です。WEBアプリケーションでよく使われるであろうMariaDBもしくはPostgreSQLに接続するための設定について見ていきます。

※本ページはプロジェクトの作成まで読まれた方を対象としています。そのためサンプルソースコードが省略されている場合があります。


データベースの準備

まずデータベースの準備をします。プロジェクト用のユーザー(postgresqlの場合はROLE)とデータベースを作成します。今回はlocalhostのDBにアクセスする想定で進めます。異なるホストのDBを使用する場合は適宜読み替えて下さい。

MariaDBの場合

mysql -u root -p{password}

{password}にはrootパスワードを入れて下さい。

[MariaDB] CREATE DATABASE forum_data;
[MariaDB] CREATE USER "forum_user"@"localhost" IDENTIFIED BY "{password}";
[MariaDB] GRANT ALL ON forum_data.* TO 'forum_user'@'localhost';

{password}にはMariaDBのrootユーザーパスワードを入れて下さい。

Postgresqlの場合

$ su postgres
#パスワード入力
postgres$ psql postgres

postgresql内で操作します。

 [postgres] CREATE ROLE forum_user WITH LOGIN CERATEDB PASSWORD '{password}';
 [postgres] \connect - forum_user #ユーザーの切り替え
 [postgres] CREATE DATABASE forum_data;

標準では認証方式がpeerとなっているためパスワードでログイン出来るようにpg_hba.confファイルを変更します。場所はディストリビューションやバージョンによって異なるので一概に言えないのですが、RedHat系は/usr/local/pgsql/data/以下、Debian系は/etc/{バージョン}/main/以下が多いと思います。Macは…RedHat系と同様だったと思いますが記憶が曖昧です。

pg_hba.conf

- local   all         all          peer
+ local   all         postgres     peer
+ local   all         all          md5

これでpostgresユーザーのみpeerで他のユーザーはパスワードでログイン可能となりました。 データベースの細かい設定は今回の目的から逸れるので細かく触れません。ご自分の環境に合わせて作成して下さい。尚、ご存知の通りPostgresqlはデフォルト設定でlocalhostからのみアクセス可能な設定となっていますので、外部からアクセスする際は設定を変更して下さい。(postgres.confにて設定)

データベースドライバのインストール

MariaDBの場合

(venv)$ pip install mysqlclient

Postgresqlの場合

(venv)$ pip install psycopg2-binary

データベース接続の設定

settigs.pyに以下例のように記述します。

settings.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'forum_data',
        'USER': 'forum_user',
        'HOST': 'localhost',
        'PASSWORD': '{##your password##}',
    }
}

「{##your password##}」の部分はデータベースのパスワードを設定して下さい。Postgresqlの場合はENGINEが’django.db.backends.postgresql’となるだけです。

最後に

これでデータベースに接続する準備が整いました。この後マイグレーションを行い、Django標準のモデルを基にデータベーステーブルを作成するのが一般的ですが、マイグレーションについては別の機会に扱うこととします。

Sponsored Link


「1-2. データベースへの接続準備」への6件のフィードバック

  1. CREATE ROLE forum_user WITH LOGIN CERATEDB PASSWORD ‘{password}’;
    たぶん
    CREATE ROLE forum_user WITH CREATEDB LOGIN PASSWORD ‘{password}’;
    でないと設定できないと思います。

    1. M.Iさん

      コメントいただいた件ですが、
      CREATE ROLE forum_user WITH LOGIN CERATEDB PASSWORD ‘{password}’;
      でロール作成可能です。こちらはPostgresql 12.1で検証しています。

      with句に続くoptionは独立でありoptionを並べる順序に無関係との認識です。
      ご参考:https://www.postgresql.jp/document/11/html/sql-createrole.html

      「たぶん〜できないと思う」とのことですが、実際にやってみてできなかったということでしょうか?

  2. CREATE USER “forum_user”@”localhost” IDENTIFIED “{password}”;

    CREATE USER “forum_user”@”localhost” IDENTIFIED BY “{password}”;

コメントを残す

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