DjangoのenvironでDATABASESにOPTIONSを設定できない説【解決案をいただきました】
コメントにて解決案をいただきました!
公式ドキュメントには書いてないですが、GitHubを見るとquery parameterがOPTIONSに対応しているようです。
https://github.com/joke2k/django-environ/blob/main/environ/environ.py#L512
今回はDjangoのライブラリの一つであるdjango-environでDATABASESを設定したときにOPTIONSを設定できない可能性があるということについてお話ししていこうと思います。
DjangoのenvironでDATABASESにOPTIONSを設定できない説
タイトルの通りです。
Djangoのenvironを使用したときに、DATABSESにenv.db()を使って
1 2 3 |
DATABASES = { 'default': env.db() } |
のようにする方法がありますが、env.db()を使ったときにOPTIONSを設定できない可能性があります。
DATABASESを設定するときには、省略せずに下記のように書く必要がありそうです。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
DATABASES = { 'default': { 'ENGINE': '', 'NAME': '', 'USER': '', 'PASSWORD': '', 'HOST': '', 'PORT': '', 'OPTIONS': { 'init_command': "SET sql_mode='STRICT_TRANS_TABLES'", }, } } |
下記がdjango-environの公式ドキュメントのリンクになりますが、2020年8月現在「OPTIONS」などで検索をかけてもヒットしません。
https://django-environ.readthedocs.io/en/latest/index.html
Google検索でざっと探してみましたが、やはりOPTIONSを設定するためにはdjango-environの書き方ではなく一般的なDATABASESの定義の書き方を採用しなければならなそうです。
開発環境や本番環境でDBを切り替えたい場合は、Djangoのsettingsを分けるなどした方が良さそうですね。
もしenv.db()を使ったOPTIONSを設定する方法を知っていたらコメント欄にて教えていただければ幸いです。
終わりに
今回はDjangoのライブラリの一つであるdjango-environでDATABASESを設定したときにOPTIONSを設定できない可能性があるということについてお話しいたしました。
ディスカッション
コメント一覧
OPTIONSに関しては明示的にdocumentに書いてありませんが、設定は可能です。
こちらのcodeを見て分かるとおりquery parameterがOPTIONSに対応します。
https://github.com/joke2k/django-environ/blob/main/environ/environ.py#L512
envファイルで
—
DATABASE_URL=mysql://test_user:password@localhost:3306/test_database?init_command=SET%20sql_mode=%27STRICT_TRANS_TABLES%27&charset=utf8mb4
—
とした場合、
DATABASES = {
‘default’: env.db(),
}
↓
DATABASES = {
‘default’: {
‘ENGINE’: ‘django.db.backends.mysql’
‘NAME’: ‘test_database’,
‘USER’: ‘test_user’,
‘PASSWORD’: ‘password’,
‘HOST’: ‘localhost’,
‘PORT’: 3306,
‘OPTIONS’: {
‘init_command’: “SET sql_mode=’STRICT_TRANS_TABLES'”,
‘charset’: “utf8mb4”,
},
}
}
になります。
ご確認ください。
ご指摘ありがとうございます!
確かにGitHubのソースコードを見るとquery parameterによってoptionを設定できますね。
DBの情報を直接ソースコードとして管理することなく、envファイルに設定したい時があるので非常に参考になりました!
記事に補足として書かせていただきます!