Django 1.2 के बाद से, आप अपने settings.py
. में एकाधिक डेटाबेस कनेक्शन परिभाषित कर सकते हैं . तब आप डेटाबेस राउटर का उपयोग कर सकते हैं Django को यह बताने के लिए कि आपके आवेदन के लिए पारदर्शी रूप से किस डेटाबेस में जाना है।
अस्वीकरण: मैं इस तरह से सोचता हूं यह काम करना चाहिए, मैंने कभी भी Django में MongoDB का उपयोग नहीं किया है, न ही मैंने परीक्षण किया है कि मेरा कोड वास्तव में काम करता है। :)पी>
सेटिंग्स.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