今回のテーマは「データベース接続準備」です。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
CREATE ROLE forum_user WITH LOGIN CERATEDB PASSWORD ‘{password}’;
たぶん
CREATE ROLE forum_user WITH CREATEDB LOGIN PASSWORD ‘{password}’;
でないと設定できないと思います。
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
「たぶん〜できないと思う」とのことですが、実際にやってみてできなかったということでしょうか?
GRANT ALL ON forum_data.* TO ‘froum_user’@’localhost’;
「froum_user」タイポですね。
ユウさん
ご指摘ありがとうございます。修正いたしました。
CREATE USER “forum_user”@”localhost” IDENTIFIED “{password}”;
CREATE USER “forum_user”@”localhost” IDENTIFIED BY “{password}”;
通りすがりさん
ご指摘ありがとうございます。修正いたしました。