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. HUAWEI防火墙双出口据链路带宽负载分担

    组网图形 组网需求 通过配置根据链路带宽负载分担,使流量按照带宽的比例分担到各链路上,保证带宽资源得到充分利用. 如图1所示,企业分别从ISP1和ISP2租用了一条链路,ISP1链路的带宽为100M, ...

  2. 1.7.8- HTML合并单元格

    跨行与跨列

  3. Ribbon、Feign和OpenFeign的区别

    Spring Cloud 微服务架构学习记录与示例 Ribbon Ribbon 是 Netflix开源的基于HTTP和TCP等协议负载均衡组件 Ribbon 可以用来做客户端负载均衡,调用注册中心的服 ...

  4. Android敲诈者病毒“安卓性能激活”分析(2015年9月版)

    一.情况简介 前几天分析了论坛里的一个Android敲诈者病毒,感觉还是很有收获,后面有空多研究研究Android病毒.说句题外话, 根据前面分析的Android敲诈者病毒的隐藏手法,应该可以实现&q ...

  5. POJ 3301 三分(最小覆盖正方形)

    题意:      给你n个点,让你找一个最小的正方形去覆盖所有点.思路:       想一下,如果题目中规定正方形必须和x轴平行,那么我们是不是直接找到最大的x差和最大的y差取最大就行了,但是这个题目 ...

  6. Android进程的so注入--Poison(稳定注入版)

    本文博客地址:http://blog.csdn.net/qq1084283172/article/details/53869796 Android进程的so注入已经是老技术了,网上能用的Android ...

  7. android添加账户流程分析涉及漏洞修复

    android修复了添加账户代码中的2处bug,retme取了很酷炫的名字launchAnyWhere.broadAnywhere(参考资料1.2).本文顺着前辈的思路学习bug的原理和利用思路. 我 ...

  8. 使用SSH端口做端口转发以及反向隧道

    目录 SSH做本地端口转发 SSH做反向隧道(远程端口转发) 用autossh建立稳定隧道 SSH开启端口转发需要修改 /etc/ssh/sshd_config配置文件,将 GatewayPorts修 ...

  9. MinGW 可以编译驱动的

    #include <ddk/ntddk.h> static VOID STDCALLmy_unload( IN PDRIVER_OBJECT DriverObject ) {} NTSTA ...

  10. linux当前运行进程

    一:linux查询服务器服务进程 inux中的ps命令是Process Status的缩写.ps命令用来列出系统中当前运行的那些进程.ps命令列出的是当前那些进程的快照, 就是执行ps命令的那个时刻的 ...