Ho più app nel mio sito django. comePosso usare diversi database per diverse app in django
mainsite
blog
tutorials
ma voglio archiviare diversi modelli in diversi database in modo che possano essere separati
posso farlo in Django
Ho più app nel mio sito django. comePosso usare diversi database per diverse app in django
mainsite
blog
tutorials
ma voglio archiviare diversi modelli in diversi database in modo che possano essere separati
posso farlo in Django
Ecco cosa si dovrà fare per andare avanti
1) Aggiorna le impostazioni per i database che si desidera utilizzare.
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) Per ogni database, implementare un router database che instraderà le query in modo appropriato. Nel tuo caso implementa in ogni app. Nota questo più o meno preso da documenti django.
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) Aggiornare DATABASE_ROUTERS
in settings.py
settings.py
DATABASE_ROUTERS = ['app1.dbRouter.App1DBRouter', 'app2.dbRouter.App2DBRouter']
È tutto. Voglio dire quando creo i modelli da admin, verranno automaticamente salvati nel secondo database. o devo fare più cose per l'amministratore – user825904
È necessario fare syncdb, penso che potrebbe essere necessario reimpostare se i DB sono già presenti. – Rohan
Vorrei suggerire di cambiare il nome del db da 'app1' a db_app1 per distinguere quando deve essere usato il nome db e quando deve essere usata l'app. –
Forse rilevanti: http://stackoverflow.com/questions/ 7970872/how-to-use-a-different-database-per-application-instance-in-django; https://docs.djangoproject.com/en/dev/topics/db/multi-db/ –