Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

multiple databases and multiple models in django

I have two databases and two models:the Admin and the user.

I want to sync my models to the two databases; admin model to database A and user model to database B;

If I am setting the model path to INSTALLED_APPS and syncdb, the two models will sync to the default database.

if I set the database in the syncdb command such as sync --database="B", and the two models will sync to database B.

So my problem is, how do I sync the two models to two databases?

like image 355
kuafu Avatar asked Aug 31 '13 11:08

kuafu


People also ask

Can you have multiple databases in Django?

Django's admin doesn't have any explicit support for multiple databases. If you want to provide an admin interface for a model on a database other than that specified by your router chain, you'll need to write custom ModelAdmin classes that will direct the admin to use a specific database for content.

What is database model in Django?

A model is the single, definitive source of information about your data. It contains the essential fields and behaviors of the data you're storing. Generally, each model maps to a single database table. The basics: Each model is a Python class that subclasses django.db.models.Model .


1 Answers

I fully agree with @alecxe on using the database router. I am currently using a single admin interface to manage multiple databases. Note that authentication for all databases are stored in the default database, so when you do the syncdb (with no arguments).

Generic Database Router

I found this implementation to be extremely flexible and useful.

Settings.py

# Define the database manager to setup the various projects DATABASE_ROUTERS = ['manager.router.DatabaseAppsRouter'] DATABASE_APPS_MAPPING = {'mux_data': 't29_db',                           'T50_VATC':'t50_db'}  DATABASES = {     'default': {             'ENGINE': 'django.db.backends.postgresql_psycopg2',              'NAME': 'fail_over',                                 'USER': 'SomeUser',                                   'PASSWORD': 'SomePassword',                               'HOST': '127.0.0.1',                                  'PORT': '',                           },      't29_db': {             'ENGINE': 'django.db.backends.postgresql_psycopg2',              'NAME': 'mux_stage',                                 'USER': 'SomeUser',                                   'PASSWORD': 'SomePassword',                               'HOST': '127.0.0.1',                                   'PORT': '',                           },      't50_db': {             'ENGINE': 'django.db.backends.postgresql_psycopg2',              'NAME': 't50_vatc',                                 'USER': 'SomeUser',                                   'PASSWORD': 'SomePassword',                              'HOST': '127.0.0.1',                                  'PORT': '',                           }, } 

Sample Models

# Create your models here. class Card_Test(models.Model):     name = models.TextField(max_length=100)     description = models.TextField(max_length=200)     units = models.TextField(max_length=500)     result_tags = models.TextField(max_length=500)      class Meta:         app_label = 'mux_data'      def __unicode__(self):         return self.name  class Status_Type(models.Model):     status = models.CharField(max_length=25)      class Meta:         app_label = 'mux_data'      def __unicode__(self):         return self.status 
like image 181
Adam Lewis Avatar answered Sep 22 '22 15:09

Adam Lewis