python - django中的多个数据库和多个模型

标签 python database django django-models

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

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

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

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

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

最佳答案

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

通用数据库路由器

我找到了 this实现非常灵活和有用。

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': '',                      
    },
}

示例模型

# 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

关于python - django中的多个数据库和多个模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18547468/

相关文章:

python - “InMemoryUploadedFile”对象没有属性 'get'

php - MySQL 分组依据 + 顺序

Python从socket中分割数据

python - 使用 Matplotlib 平滑等值线图中的数据

python - 在分布式系统中实现DBSCAN

python - 大数据集的 Django 分页太慢

sql-server - 在 1 台服务器上的 2 个不同数据库中的表之间使用 INNER JOIN 更新查询

python - Django 多结果集

python - django send_mail 554 - 中继访问被拒绝

python - 迭代不同长度的列表并设置默认值的好方法