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 "{password}";
[MariaDB] GRANT ALL ON forum_data.* TO 'froum_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標準のモデルを基にデータベーステーブルを作成するのが一般的ですが、マイグレーションについては別の機会に扱うこととします。

コメントを残す

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