sql >> Database teknologi >  >> NoSQL >> MongoDB

Blanding af PostgreSQL og MongoDB (som Django-backends)

Siden Django 1.2 kan du definere flere databaseforbindelser i din settings.py . Så kan du bruge databaseroutere at fortælle Django, hvilken database han skal gå til, transparent for din applikation.

Ansvarsfraskrivelse: sådan tænker jeg det burde virke, jeg har aldrig brugt MongoDB i Django, og jeg har heller ikke testet at min kode rent faktisk virker. :)

settings.py

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

DATABASE_ROUTERS = ['path.to.ModelMetaRouter']

Modeller

Tilføj derefter brugerdefinerede metavariabler til dine geo-tabeller for at tilsidesætte deres database. Tilføj ikke denne egenskab til modeller, der formodes at gå til standarddatabasen.

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

Databaserouter

Og skriv en databaserouter til at dirigere alle modeller, der har using meta-attributsæt, til den relevante forbindelse:

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. Node.js fejl Fejl:Kan ikke finde modulet 'mongoose'

  2. Catbox-redis viser afbrudt fejl på min hapijs-applikation

  3. Hvordan aktiverer jeg TLS til Redis 6 på Sidekiq?

  4. Kan jeg bruge '$set' på indlejret dokument, når jeg bruger variabel som arkiveret navn i MongoDB?