sql >> データベース >  >> NoSQL >> MongoDB

PostgreSQLとMongoDBの混合(Djangoバックエンドとして)

    Django 1.2以降、settings.pyで複数のデータベース接続を定義できます 。次に、データベースルーターを使用できます アプリケーションに対して透過的に、どのデータベースに移動するかをDjangoに指示します。

    免責事項: これが私が考える方法です 動作するはずです。DjangoでMongoDBを使用したことも、コードが実際に動作することをテストしたこともありません。 :)

    settings.py

    DATABASES = {
        'default': {
            'ENGINE': 'django_mongodb_engine',
            'NAME': 'mydata',
            ...
        }
        'geodata' {
            'ENGINE': 'django.db.backends.postgresql_psycopg2',
            'NAME': 'geodata',
            ...
        }
    }
    
    DATABASE_ROUTERS = ['path.to.ModelMetaRouter']
    

    モデル

    次に、カスタムメタ変数をジオテーブルに追加して、データベースをオーバーライドします。デフォルトのデータベースに移動することになっているモデルにこの属性を追加しないでください。

    class SomeGeoModel(models.Model):
        ...
        class Meta:
            using = 'geodata'
    

    データベースルーター

    そして、usingを持つすべてのモデルに指示するデータベースルーターを作成します 適切な接続へのメタ属性セット:

    class ModelMetaRouter(object):
        def db_for_read(self, model, **hints):
            return getattr(model._meta, 'using', None)
    
        def db_for_write(self, model, **hints):
            return getattr(model._meta, 'using', None)
    
        def allow_relation(self, obj1, obj2, **hints):
            # only allow relations within a single database
            if getattr(obj1._meta, 'using', None) == getattr(obj2._meta, 'using', None):
                return True
            return None
    
        def allow_syncdb(self, db, model):
            if db == getattr(model._meta, 'using', 'default'):
                return True
            return None
    


    1. データサイエンス分野におけるMongoDBの重要性の高まり

    2. マングースTypeError:ユーザーはコンストラクターではありません

    3. SET {Key}の実行タイムアウト、inst:0、mgr:非アクティブ、キュー:2、qu =1、qs =1、qc =0、wr =1/1、in =0/0

    4. 名前の衝突を避けるためにredisでキーに名前空間を付ける方法は?