sql >> Database >  >> NoSQL >> MongoDB

PostgreSQL en MongoDB mixen (als Django-backends)

Sinds Django 1.2 kunt u meerdere databaseverbindingen definiëren in uw settings.py . Dan kunt u databaserouters . gebruiken om Django te vertellen naar welke database hij moet gaan, transparant voor uw toepassing.

Disclaimer: dit is hoe ik denk het zou moeten werken, ik heb nog nooit MongoDB in Django gebruikt en ik heb ook niet getest of mijn code echt werkt. :)

settings.py

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

DATABASE_ROUTERS = ['path.to.ModelMetaRouter']

Modellen

Voeg vervolgens aangepaste Meta-variabelen toe aan uw geo-tabellen om hun database te overschrijven. Voeg dit kenmerk niet toe aan modellen die geacht worden naar de standaarddatabase te gaan.

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

Databaserouter

En schrijf een databaserouter om alle modellen te sturen die de using . hebben meta-attribuutset, naar de juiste verbinding:

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. Geëxporteerde MongoDB-documenten mooier maken in mongoexport

  2. Redis:mogelijk om een ​​element in een array of gesorteerde set te laten verlopen?

  3. Ik probeer een lijst met collecties van mangoest te krijgen

  4. Hoe verbinding maken met een externe Redis-server?