sql >> データベース >  >> RDS >> Mysql

Djangoと読み取り専用のデータベース接続

    私は(Django 1.11を使用して)同じ問題に遭遇しました、そしてこの質問はそれのための私のグーグル結果の一番上にありました。

    最初の解決策には、重要な部分が1つだけ欠けています。 「C」と「D」が使用しているデータベースモデルをDjangoに伝える必要があります。私のために働いたこと:

    class ExternalModel(models.Model):
        class Meta:
            managed = False
            abstract = True    
            app_label = 'support'
    

    次に、allow_migrate()セクションでそのapp_labelに遭遇したときの動作方法をデータベースルーターに指示します。

        def allow_migrate(self, db, app_label, model_name=None, **hints):
            if app_label == 'support':
                return False
            return (db == 'default')
    

    それがDjangoチームの観点から見て最も正しい解決策であるかどうかはわかりませんが、そのapp_label属性値で定義されたモデルに対してallow_migrate()がFalseを返すという効果があります。

    Django ルーターに関するドキュメント これについては明示的に言及していません(または、少なくともORMが「db」の値をallow_migrate()に渡す方法を明確にするモデルコードサンプルでは)が、「app_label」属性と「managed」属性の間で取得できます動作する*。

    *私の場合、デフォルトはpostgresで、読み取り専用データベースはcx_Oracle経由のOracle12です。



    1. 動的に生成されたテーブル名を使用して選択

    2. MariaDBでのCONV()のしくみ

    3. PostgreSQLでのcbrt()のしくみ

    4. ガレラクラスターを保護する方法-8つのヒント