1.首先配置多个数据库,在settings配置文件中配置以下内容:

DATABASES = {
'default': { #默认数据库,配置多个mysql数据也是ok的,混用数据库也是ok的
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
},
'db2': { #配置的第二个数据库,注意数据库名字不能相同
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db2.sqlite3'),
}
}

2.执行数据库同步指令,将我们的表结构生成到db2这个数据库中

python migrate --database db2(库名)

  执行完上面的指令之后,你就会发现,db2这个库里面就有了我们的表

3.看看读写分离的情况下,django怎么玩

  a.手动写,在views.py文件中写

def dbtest(request):
data = []
# 向db2数据库中写入数据
# models.Class.objects.using('db2').create(name='xx') # 从db1中读取数据
data = models.Class.objects.using('default').all()
# 更新时 for i in data: i.name = 'xxxxxx' i.save(using='default') #更新时指定数据库
return render(request,'dbtest.html',{'data':data})

  b.配置自动

   在应用文件夹中创建一个py文件,名字随意,比如叫做router.py文件,写上下面的内容:

class Router:
# 读操作用default库,就return这个库名字符串
def db_for_read(self,model,**kwargs):
return 'default' def db_for_write(self,model,**kwargs):
return 'db2'

    然后在settings配置文件中做下面的配置

DATABASE_ROUTERS = ['app01.router.Router',] #写上面这个类的路径,我的是在app01应用文件夹下面的router.py文件中了

   那么在逻辑的views.py文件中写的时候,就不需要using指定数据库了

def dbtest(request):
data = []
# 向db2数据库中写入数据
models.Class.objects.create(name='xx2') # 从db1中读取数据
data = models.Class.objects.all() return render(request,'dbtest.html',{'data':data})

  那么如果是一主多从的时候,也就是从多个数据库中读取的时候:

import random
class Router:
# 读操作用default库,就return这个库名字符串
def db_for_read(self,model,**kwargs):
print(11111)
print(model._meta.app_label)
return 'default'
# return random.choice(['db1','db2','db3']) #多个库读的时候,可以简单的写个随机选择 def db_for_write(self,model,**kwargs): return 'db2'

  

  根据不同的应用来选择不同的库进行读取

import random
class Router:
# 读操作用default库,就return这个库名字符串
def db_for_read(self,model,**kwargs):
print(model)
print(dir(model))# 其中有个_meta属性很有用
a = model._meta.app_label #获取当前model对象所在的应用名称     m = model._meta.model_name 获取当前操作的model对象的表名,也可以根据表名来进行多数据库读的分配
# 可以根据应用选择不用的库来进行读取
if a == 'app01':
return 'db1'
elif a == 'app02':
return 'db2'
return 'default' def db_for_write(self,model,**kwargs):

Django学习之完成数据库主从复制、读写分离和一主多从情况下的使用办法的更多相关文章

  1. Mysql多实例安装+主从复制+读写分离 -学习笔记

    Mysql多实例安装+主从复制+读写分离 -学习笔记 .embody{ padding:10px 10px 10px; margin:0 -20px; border-bottom:solid 1px ...

  2. 如何轻松实现MySQL数据库的读写分离和负载均衡?

    配置好了 Mysql 的主从复制结构后,我们希望实现读写分离,把读操作分散到从服务器中,并且对多个从服务器能实现负载均衡.读写分离和负载均衡是 Mysql 集群的基础需求,MaxScale 就可以帮着 ...

  3. 利用oneproxy部署mysql数据库的读写分离

    实验系统:CentOS 6.6_x86_64 实验前提:防火墙和selinux都关闭 实验说明:本实验共有4台主机,IP分配如拓扑 实验软件:mariadb-10.0.20 oneproxy-rhel ...

  4. MySQL搭建主从数据库 实现读写分离

    首先声明,实际生产中,网站为了提高用户体验,性能等,将数据库实现读写分离是有必要的,我们让主数据库去写入数据,然后当用户查询的时候,然后在从数据库读取数据,故能减轻数据库的压力,实现良好的用户体验! ...

  5. Mycat - 实现数据库的读写分离与高可用

    前言 开心一刻 上语文课,不小心睡着了,坐在边上的同桌突然叫醒了我,并小声说道:“读课文第三段”.我立马起身大声读了起来.正在黑板写字的老师吓了一跳,老师郁闷的看着我,问道:“同学有什么问题吗?”,我 ...

  6. 基于 EntityFramework 的数据库主从读写分离服务插件

    基于 EntityFramework 的数据库主从读写分离服务插件 1. 版本信息和源码 1.1 版本信息 v1.01 beta(2015-04-07),基于 EF 6.1 开发,支持 EF 6.1 ...

  7. MySQL主从复制&读写分离&分库分表

    MySQL主从复制 MySQL的主从复制只能保证主机对外提供服务,从机是不提供服务的,只是在后台为主机进行备份数据 首先我们说说主从复制的原理,这个是必须要理解的玩意儿: 理解: MySQL之间的数据 ...

  8. MySQL 主从复制&读写分离 简介

    1. 读写分离&读写分离 简介 主从同步延迟 分配机制 解决单点故障 总结 2. 主从复制&读写分离 搭建 搭建主从复制(双主) 搭建读写分离 1. 读写分离&读写分离 简介 ...

  9. Mycat+MySql 主从复制-读写分离 看这一篇就够了

    ​ 通过mycat和mysql的主从复制配合搭建数据库的读写分离,可以实现mysql的高可用性,下面我们来搭建mysql的读写分离. 1.一主一从 1.在node01上修改/etc/my.cnf的文件 ...

随机推荐

  1. 【全网首发】鸿蒙开源三方组件--强大的弹窗库XPopup组件

    目录: 1.介绍 2.效果一览 3.依赖 4.如何使用 5.下载链接 6.<鸿蒙开源三方组件>文章合集 1. 介绍 ​ XPopup是一个弹窗库,可能是Harmony平台最好的弹窗库.它从 ...

  2. Unity基础-脚本生命周期

    理解Unity脚本的生命周期对游戏开发很重要,这篇文章对生命周期做一个记录和总结.Unity的脚本生命周期(消息),也就是在脚本运行时,自动并且按顺序执行的一系列函数.在unity官网中有对生命周期详 ...

  3. Spring Security极简入门三部曲(中篇)

    目录 Spring Security极简入门三部曲(中篇) 验证流程 Authentication接口 过滤器链 AuthenticationProvider接口: demo时刻 代码讲解 小结 Sp ...

  4. ajax异步登录

    以下是ajax代码示例: HTML <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " ...

  5. 一份释放root文件的脚本文件

    #!/system/bin/sh MYDIR=$3 ARGS=$4 SU=$MYDIR/au SUPOLICY=$MYDIR/supolicy BUSYBOX=$MYDIR/busybox TOOLB ...

  6. LAMP环境搭建一个Discuz论坛

    LAMP是Linux+Apache+Mysql/MariaDB+Perl/PHP/Python的简称.一组常用来搭建动态网站或者服务器的开源软件,本身都是各自独立的程序,但是因为常被放在一起使用,拥有 ...

  7. IDEA只有Commit没有Push按钮

    问题描述 idea的右上角只有commit按钮,而没有push按钮 问题解决 打开File->Settings->Menus and Toolbars->Navigation Bar ...

  8. 【Redis】redis异步消息队列+Spring自定义注解+AOP方式实现系统日志持久化

    说明: SSM项目中的每一个请求都需要进行日志记录操作.一般操作做的思路是:使用springAOP思想,对指定的方法进行拦截.拼装日志信息实体,然后持久化到数据库中.可是仔细想一下会发现:每次的客户端 ...

  9. 用 shell 脚本制造连接频繁中断的场景

    问题的提出 最近在准备客户端的新版本,在内部灰度过程中,发现一类奇怪的 dump,通过查看日志和堆栈,可以确定是因为每次连上后台就被后台断开了.导致多次重连后随机发生的崩溃.dump 和日志都无法提供 ...

  10. Docker安装教程(超详细)

    Docker安装教程(超详细) 欢迎关注博主公众号「Java大师」, 专注于分享Java领域干货文章, 关注回复「资源」, 免费领取全网最热的Java架构师学习PDF, 转载请注明出处 http:// ...