【发布时间】:2018-07-03 18:24:26
【问题描述】:
我想将我的应用程序连接到 3 个不同的数据库。
为此,我在设置文件中更改了以下代码:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'local_db',
'USER': 'root',
'PASSWORD': 'password1',
'HOST': 'localhost',
'PORT': '3306',
'OPTIONS': { 'sql_mode': 'traditional', }
},
'firstExternalDb': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'firstExternalDb',
'USER': 'userName',
'PASSWORD': 'password1',
'HOST': 'firstExternalDb.node.com',
'PORT': '3306',
'OPTIONS': { 'sql_mode': 'traditional', }
},
'secondExternalDb': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'secondExternalDb',
'USER': 'userName',
'PASSWORD': 'password1',
'HOST': 'secondExternalDb.node.com',
'PORT': '3306',
'OPTIONS': { 'sql_mode': 'traditional', }
},
}
我希望能够指定我将为哪个数据库创建数据表。例如我想保存在 localhost 中的所有 django 表,如 'auth_group' 、 'django_admin_log'。
正在尝试通过本教程创建路由器https://docs.djangoproject.com/pl/1.11/topics/db/multi-db/#topics-db-multi-db-routing
但我不明白这一点。你能回答我的问题吗:
- 我应该为每个应用程序创建新路由器吗?
- 如何定义所有django表都应该被默认数据库使用?
我在两个模型文件中创建了两个路由器: 第一个仅用于默认数据库:
class defaultRouter:
def db_for_read(self, model, **hints):
return 'default'
def db_for_write(self, model, **hints):
return 'default'
def allow_relation(self, obj1, obj2, **hints):
db_list = ('default')
if obj1._state.db in db_list and obj2._state.db in db_list:
return True
return None
def allow_migrate(self, db, app_label, model_name=None, **hints):
return True
下一个应用中的第二个:
class secondExternalDbRouter:
def db_for_read(self, model, **hints):
return 'secondExternalDb'
def db_for_write(self, model, **hints):
return 'secondExternalDb'
def allow_relation(self, obj1, obj2, **hints):
db_list = ('secondExternalDb')
if obj1._state.db in db_list and obj2._state.db in db_list:
return True
return None
def allow_migrate(self, db, app_label, model_name=None, **hints):
return True
两个路由器都在模型类下,在同一个文件中。
设置文件:
DATABASE_ROUTERS = ['mainApp.models.defaultRouter','secondApp.models.secondExternalDbRouter',]
【问题讨论】:
标签: python django django-models