def db_for_read(self, model, **hints):
Point all read operations to the specific database.
将所有读操作指向特定的数据库。
if model._meta.app_label in DATAbase_MAPPING:
return DATAbase_MAPPING[model._meta.app_label]
return None
def db_for_write(self, model, **hints):
Point all write operations to the specific database.
将所有写操作指向特定的数据库。
if model._meta.app_label in DATAbase_MAPPING:
return DATAbase_MAPPING[model._meta.app_label]
return None
def allow_relation(self, obj1, obj2, **hints):
Allow any relation between apps that use the same database.
允许使用相同数据库的应用程序之间的任何关系
db_obj1 DATAbase_MAPPING.get(obj1._meta.app_label)
db_obj2 DATAbase_MAPPING.get(obj2._meta.app_label)
if db_obj1 and db_obj2:
if db_obj1 db_obj2:
return True
else:
return False
else:
return None
def allow_syncdb(self, db, model):
Make sure that apps only appear in the related database.
确保这些应用程序只出现在相关的数据库中。
if db in DATAbase_MAPPING.values():
return DATAbase_MAPPING.get(model._meta.app_label) db
elif model._meta.app_label in DATAbase_MAPPING:
return False
return None
def allow_migrate(self, db, app_label, model None, **hints):
Make sure the auth app only appears in the auth_db database.
确保身份验证应用程序只出现在“authdb”数据库中。
if db in DATAbase_MAPPING.values():
return DATAbase_MAPPING.get(app_label) db
elif app_label in DATAbase_MAPPING:
return False
return None
4.2.2 settings.py 配置
在 setting.py 中配置 DATAbase_ROUTERS 指定自由路由文件
# 数据库设置, xxxx0001为项目名称
DATAbase_ROUTERS [ xxxx0001.db_router.database_router ]
在 setting.py 中 DATAbase_ROUTERS 下面设置app与数据库匹配路由表 采用字典方式app名对应数据库映射名
DATAbase_APPS_MAPPING {
app01 : default ,
app02 : db2 ,
4.2.3 生成表并同步数据
分别在app01和app02下创建model类 用于生成数据表:
此处只定义了 app02 的模型 注意 加上app_label以后就会指明所属的app
from django.db import models
class IntelligentTableView(models.Model):
table_name models.CharField(max_length 255, verbose_name 报表名称 )
center models.CharField(max_length 50, verbose_name 所属中心 )
on_line models.CharField(max_length 50, verbose_name 所属线条 )
remake models.CharField(max_length 255, verbose_name 备注 )
create_name models.CharField(max_length 50, verbose_name 创建人 )
create_date models.DateTimeField(auto_now True, verbose_name 创建时间 )
is_del models.BooleanField(default False, verbose_name 是否删除 )
class meta:
db_table intelligent_table # 表名
verbose_name 智能报表
app_label app02 # 指明app名称 用来对应app 和 数据库的map表
migrate管理命令一次只能操作一个数据库 默认操作default数据库 使用–database指定同步的数据库
python manage.py migrate # 生成表数据同步
python manage.py makemigrations # # 生成迁移文件
python manage.py migrate --database default # 同步指定数据库
python manage.py migrate --database db2