我有两个数据库和两个模型:Admin和user。
我想要将我的模型同步到这两个数据库中;Admin模型同步到数据库A,而user模型同步到数据库B。
如果我将模型路径设置为INSTALLED_APPS
并运行syncdb
命令,则这两个模型将会同步到默认的数据库。
如果我在syncdb
命令中设置数据库,例如sync --database="B"
,则这两个模型将同步到数据库B。
所以我的问题是,如何将这两个模型同步到两个不同的数据库?
我有两个数据库和两个模型:Admin和user。
我想要将我的模型同步到这两个数据库中;Admin模型同步到数据库A,而user模型同步到数据库B。
如果我将模型路径设置为INSTALLED_APPS
并运行syncdb
命令,则这两个模型将会同步到默认的数据库。
如果我在syncdb
命令中设置数据库,例如sync --database="B"
,则这两个模型将同步到数据库B。
所以我的问题是,如何将这两个模型同步到两个不同的数据库?
我完全同意 @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': '',
},
}
示例模型
# 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
使用多个数据库的最简单方法是设置数据库路由方案。默认路由方案确保对象保持“粘性”到其原始数据库(即,从foo数据库检索的对象将保存在同一数据库中)。默认路由方案确保如果未指定数据库,则所有查询都回退到默认数据库。
请参见此片段作为示例:http://djangosnippets.org/snippets/2687/
还请参阅: