matobaの学んだこと

とあるPythonエンジニアのブログ

MezzanineのDB接続周りでハマった話

MezzanineというDjangoでできたWordPressライクなCMSで遊んでいます。

DB接続周りでハマった話。

djangoなので、settingsのDATABASESにDB接続の設定を書けばいいと思った。

mezannineが用意しているsettingsに以下の記載がある。

DATABASES = {
    "default": {
        # Add "postgresql_psycopg2", "mysql", "sqlite3" or "oracle".
        "ENGINE": "django.db.backends.",
        # DB name or path to database file if using sqlite3.
        "NAME": "",
        # Not used with sqlite3.
        "USER": "",
        # Not used with sqlite3.
        "PASSWORD": "",
        # Set to empty string for localhost. Not used with sqlite3.
        "HOST": "",
        # Set to empty string for default. Not used with sqlite3.
        "PORT": "",
    }
}

ここを変えれば良さげなので、変えてみたんだけど、反映されなかった。

なぜだろう、と思って調べてたら、

settingsの下の方に以下の記載があった。

f = os.path.join(PROJECT_APP_PATH, "local_settings.py")
if os.path.exists(f):
    import sys
    import imp
    module_name = "%s.local_settings" % PROJECT_APP
    module = imp.new_module(module_name)
    module.__file__ = f
    sys.modules[module_name] = module
    exec(open(f, "rb").read())

local_settingsがあったら、それを読み込むという設定。

そして、local_settingsの中にもDATABASESの設定があり、上書きされる仕様になっていた。

罠だった。