django连接mysql指定用户,django 配置多个数据库,并为对应的app指定使用的数据库...

1. 配置多个数据库

首先我们需要在settings.py中配置多个数据库连接

注意:第一个数据库必须为default

DATABASES = {

'default': {

'ENGINE': 'django.db.backends.mysql', # 数据库引擎

'NAME': 'plum', # 你要存储数据的库名,事先要创建之

'USER': 'xxxx', # 数据库用户名

'PASSWORD': 'xxxx', # 密码

'HOST': '', # 主机

'PORT': '3306', # 数据库使用的端口

},

'is_a_testdata': {

'ENGINE': 'django.db.backends.mysql', # 数据库引擎

'NAME': 'test_data', # 你要存储数据的库名,事先要创建之

'USER': 'xxxx', # 数据库用户名

'PASSWORD': 'xxxx', # 密码

'HOST': 'xxxx', # 主机

'PORT': '3306', # 数据库使用的端口

}

}

复制代码

2.在settings.py配置路由文件地址

DATABASE_ROUTERS = ['trf.database_router.DatabaseAppsRouter'] #这里的值根据自己实际的命名来写

复制代码

3. 创建路由管理文件

1.在manage.py的同级目录下创建trf文件夹

2.添加database_router.py文件

3.在database_router.py文件中添加DatabaseAppRouter类

4. 添加路由规则

4.1 添加数据库别名与app名的对应关系

-- 注意以下代码全部在 trf.database_router.DatabaseAppsRouter中

# 添加数据库别名与app名的对应关系

DATABASE_MAPPING = {

'test_app': 'is_a_testdata',

'app_name1': 'db_nikename1',

'app_name2': 'db_nikename2',

...

}

复制代码

4.2 添加读取规则

# 这里已django2.X为例

# 我们要为mytest单独配置一个数据库is_a_testdata 注意:(mytest是app的名字)

# 添加读取规则

def db_for_read(self, model, **hints):

# 配置每个app使用那个数据库读

if model._meta.app_label == 'mytest':

return 'is_a_testdata'

return None

# 我们也可以为每一个app单独配置一个写入数据库, 这里就用到了我们刚刚配置的数据库别名与app对应关系字典:DATABASE_APPS_MAPPING中的app

DATABASE_APPS_MAPPING = {

'mytest': 'is_a_testdata',

'app名1': '数据库别名1',

'app名2': '数据库别名2',

.....

}

def db_for_read(self, model, **hints){

if model._meta.app_label in DATABASE_APPS_MAPPING:

return DATABASE_APPS_MAPPING[model._meta.app_label]

return None

}

复制代码

4.3 添加数据库写入规则

# 我们要为mytest单独配置一个数据库is_a_testdata 注意:(mytest是app的名字)

# 添加读取规则

def db_for_write(self, model, **hints):

# 配置每个app使用那个数据库读

if model._meta.app_label == 'mytest':

return 'is_a_testdata'

return None

# 我们也可以为每一个app单独配置一个写入数据库, 这里就用到了我们刚刚配置的数据库别名与app对应关系字典:DATABASE_APPS_MAPPING中的app

def db_for_write(self, model, **hints){

if model._meta.app_label in DATABASE_APPS_MAPPING:

return DATABASE_APPS_MAPPING[model._meta.app_label]

return None

}

复制代码

4.4 配置是否允许数据库migate

# 添加允许迁移规则

def allow_migrate(self, db, app_label, model=None, **hints):

if db in DATABASE_MAPPING.values():

return True

elif app_label in DATABASE_mAPPING:

return False

return None

# 如果我们不想对某个数据库进行迁移,我们只需要加一个判断语句就好了

def allow_migrate(self, db, app_label, model=None, **hints):

if db == '数据库别名':

return False

elif db in DATABASE_MAPPING.values():

return True

elif app_label in DATABASE_mAPPING:

return False

return None

复制代码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值