django+mysql读写分离_django中的mysql主从读写分离:二、django配置mysql主从分离

一、在配置文件中增加slave数据库的配置

DATABASES ={'default': {'ENGINE': 'django.db.backends.mysql','HOST': '127.0.0.1','PORT': 3306, # 主'USER': 'root', # 主数据库用户名'PASSWORD': 'password', # 主数据库密码'NAME': 'database_name'# 主数据库名字

},'slave': {'ENGINE': 'django.db.backends.mysql','HOST': '127.0.0.1','PORT': 8306, #从'USER': 'root', # 从数据库用户名'PASSWORD': 'password', # 从数据库密码'NAME': 'database_name'# 从数据库名字

}}

migrate --database slave 将主数据库中的数据表迁移到从数据库

mysql的读写分离在django框架中有两种方式设置:自动方式和手动方式

二、django中mysql读写分离的自动方式

通过配置数据库路由,来自动实现,这样就不需要每次读写都手动指定数据库了。数据库路由中提供了四个方法。

这里主要用其中的两个:

def db_for_read()决定读操作的数据库

def db_for_write()决定写操作的数据库

1、创建数据库操作的路由分发类

在项目封装功能的utils文件夹中创建db_router.py

class MasterSlaveDBRouter(object):"""数据库主从读写分离路由"""def db_for_read(self, model,**hints):"""读数据库"""return"slave" # 返回dj中配置中的数据库名称def db_for_write(self, model,**hints):"""写数据库"""return"default"def allow_relation(self, obj1, obj2,**hints):"""是否运行关联操作"""return True

如果有多个从库,则

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

# 读取时随机选择一个数据库

import random

return random.choice(["slave1", "slave2"])

在大型web项目中,常常会创建多个app来处理不同的业务,如果希望实现app之间的数据库分离,比如app01走数据库db1,app02走数据库db2,则:

class MasterSlaveDBRouter:

def db_for_read(self, model,**hints):if model._meta.app_label == 'goods':

return'default'

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

return'default'def db_for_write(self, model,**hints):if model._meta.app_label == 'app01':

return'salve01'

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

return'slave02'

2、项目setting配置文件中配置读写分离路由

# 配置读写分离

DATABASE_ROUTERS= ['your app name.utils.db_router.MasterSlaveDBRouter'] # 指定你的路由分发类

三、手动方式

在使用数据库时,通过.using(db_name)来手动指定要使用的数据库

例如:

GoodInfo.object.using(‘default’).all() 说明default这个设置下的数据库是用来专门读取数据的

Usermessage.object.using(‘slave’).create() 说明slave这个设置下的数据库是专门来写入数据的

其它,自动方式,也可以手动指定要使用的数据库:

保存或者删除也可以指定数据库

对象名.save(using=’default’) 或者.using(‘default’).update()

对象名.delete(using=’slave’)

参考:https://blog.csdn.net/weixin_43229759/article/details/86552476

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值