2012-12-07 27 views
15

içinde kullanabilir miyim? Django sitemde birden fazla uygulama var. gibiFarklı uygulamalar için farklı veritabanlarını django

mainsite blog tutorials

Ama onlar

i yapabilir

ayrılabilir, böylece Django

yılında Burada
+0

Belki alakalı settings.py içinde DATABASE_ROUTERS güncelleyin 7970872/nasıl kullanılır-bir-farklı-veritabanı-uygulama başına-örnek-in-django; https://docs.djangoproject.com/en/dev/topics/db/multi-db/ –

cevap

21

sahip olacak budur farklı veritabanlarında farklı modeller saklamak istediğiniz Gitmek için yapmak.

1) Kullanmak istediğiniz veritabanlarının ayarlarını güncelleyin.

settings.py

DATABASES = { 
'default': { 
    'ENGINE': 'django.db.backends.sqlite3', 
    'NAME': '/var/db/projectdb' 
} 
'db_app1': { 
    'ENGINE': 'django.db.backends.sqlite3', 
    'NAME': '/var/db/app1db' 
} 
'db_app2': { 
    'ENGINE': 'django.db.backends.sqlite3', 
    'NAME': '/var/db/app2db' 
} 

2), her bir veri tabanı için, sorgular uygun yol olacak bir veri tabanı yönlendirici uygulanması. Senin uygulamasında her uygulamada uygulamak. Django dokümanlarından daha fazla veya daha az alındığını unutmayın. http://stackoverflow.com/questions/:

app1.dbRouter.py

# DB router for app1 

class App1DBRouter(object): 
    """ 
    A router to control app1 db operations 
    """ 
    def db_for_read(self, model, **hints): 
     "Point all operations on app1 models to 'db_app1'" 
     from django.conf import settings 
     if not settings.DATABASES.has_key('app1'): 
      return None 
     if model._meta.app_label == 'app1': 
      return 'db_app1' 
     return None 

    def db_for_write(self, model, **hints): 
     "Point all operations on app1 models to 'db_app1'" 
     from django.conf import settings 
     if not settings.DATABASES.has_key('app1'): 
      return None 
     if model._meta.app_label == 'app1': 
      return 'db_app1' 
     return None 

    def allow_relation(self, obj1, obj2, **hints): 
     "Allow any relation if a model in app1 is involved" 
     from django.conf import settings 
     if not settings.DATABASES.has_key('app1'): 
      return None 
     if obj1._meta.app_label == 'app1' or obj2._meta.app_label == 'app1': 
      return True 
     return None 

    def allow_syncdb(self, db, model): 
     "Make sure the app1 app only appears on the 'app1' db" 
     from django.conf import settings 
     if not settings.DATABASES.has_key('app1'): 
      return None 
     if db == 'db_app1': 
      return model._meta.app_label == 'app1' 
     elif model._meta.app_label == 'app1': 
      return False 
     return None 

3)

settings.py

DATABASE_ROUTERS = ['app1.dbRouter.App1DBRouter', 'app2.dbRouter.App2DBRouter'] 
+0

Hepsi bu kadar mı? Ben yöneticiden modeller oluşturduğumda, otomatik olarak ikinci veritabanına kaydedilirler. ya da admin için daha fazla şey yapmam gerekiyor – user825904

+0

Senkronize edilmeniz gerekiyor, bence DB'ler zaten mevcutsa sıfırlamanız gerekebilir. – Rohan

+0

db adını kullanmanız gerektiğinde ve uygulama ne zaman kullanılmalıdır, ayırt etmek için 'app1' db_app1 db adını değiştirmek öneririz. –

İlgili konular