sql >> Databáze >  >> NoSQL >> MongoDB

Míchání PostgreSQL a MongoDB (jako backendy Django)

Od Django 1.2 můžete definovat více databázových připojení v settings.py . Poté můžete použít databázové směrovače sdělit Djangovi, do které databáze má jít, transparentně pro vaši aplikaci.

Odmítnutí odpovědnosti: takhle uvažuji mělo by to fungovat, nikdy jsem MongoDB v Django nepoužil, ani jsem netestoval, že můj kód skutečně funguje. :)

settings.py

DATABASES = {
    'default': {
        'ENGINE': 'django_mongodb_engine',
        'NAME': 'mydata',
        ...
    }
    'geodata' {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'geodata',
        ...
    }
}

DATABASE_ROUTERS = ['path.to.ModelMetaRouter']

Modely

Poté do svých geografických tabulek přidejte vlastní proměnné Meta, abyste přepsali jejich databázi. Nepřidávejte tento atribut k modelům, které mají jít do výchozí databáze.

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

Směrovač databáze

A napište databázový router, který bude řídit všechny modely, které mají using meta atribut set, k příslušnému připojení:

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. Řídítka:Přístup k vyřešení vlastnosti byl odepřen, protože to není vlastní vlastnost jejího nadřazeného prvku

  2. Chyba pole v objektu 'cíl' na poli '':zamítnutá hodnota []; kódy [typeMismatch.target.,typeMismatch.,typeMismatch.java.util.Date,typeMismatch]

  3. Vyhledávání v mongo db pomocí mongoose regex vs. text

  4. 2 způsoby, jak připojit hodnotu k poli v MongoDB