django中有多个数据库和多个模型

you*_*001 25 python database django django-models

我有两个数据库和两个模型:管理员和用户.

我想将我的模型同步到两个数据库; 管理模型到数据库A,用户模型到数据库B;

如果我将模型路径设置为INSTALLED_APPSsyncdb,则两个模型将同步到默认数据库.

如果我在syncdb命令中设置数据库sync --database="B",那么两个模型将同步到数据库B.

所以我的问题是,如何将两个模型同步到两个数据库?

Ada*_*wis 27

我完全同意@alecxe使用数据库路由器.我目前正在使用单个管理界面来管理多个数据库.请注意,所有数据库的身份验证都存储在默认数据库中,因此当您执行syncdb(不带参数)时.

通用数据库路由器

我发现这个实现非常灵活和有用.

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': '',                      
    },
}
Run Code Online (Sandbox Code Playgroud)

样本模型

# 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
Run Code Online (Sandbox Code Playgroud)

  • DatabaseAppsRouter类应该在哪里?它应该导入什么? (4认同)
  • 截至今天,链接已断开,答案无效。您应该将代码直接添加到答案中,否则它将不再是答案。 (3认同)

ale*_*cxe 19

为了定义用于特定模型的特定数据库,您需要定义数据库路由器:

使用多个数据库的最简单方法是设置数据库路由方案.默认路由方案确保对象保持对其原始数据库的"粘性"(即,从foo数据库检索的对象将保存在同一数据库中).默认路由方案可确保在未指定数据库的情况下,所有查询都会回退到默认数据库.

请参阅此片段作为示例:http://djangosnippets.org/snippets/2687/

另见: