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. 【cypress】3. 编写第一个测试

    当环境安装好了之后,就可以着手尝试第一个测试的编写了. 一.新建一个文件 在你的项目下的cypress/integration文件夹中创建一个新文件sample_spec.js,我这里直接在webst ...

  3. 866. Prime Palindrome

    Find the smallest prime palindrome greater than or equal to N. Recall that a number is prime if it's ...

  4. 『动善时』JMeter基础 — 2、JMeter的安装和启动

    1.安装Java环境 由于JMeter是纯Java的桌面应用程序,因此它的运行环境需要Java环境,即需要安装JDK或JRE.(也就是安装JDK环境) 步骤简要说明: 下载并安装JDK 配置环境变量 ...

  5. Fastjson反序列化漏洞复现

    Fastjson反序列化漏洞复现 0x00 前言 对Fastjson反序列化漏洞进行复现. 0x01 漏洞环境 靶机环境:vulhub-fastjson-1.2.24 ip:172.16.10.18 ...

  6. 关于Eclipse Debug断点调试出现 Search not found 页面的解决办法

    1. 在代码中鼠标右键 Debug AS ---> Debug Configurations... ----> 找到Source选项  ---> 点击add ---> 选择 j ...

  7. showdan

    from shodan import Shodan import json api = Shodan("") result = api.search('windows') with ...

  8. 手动脱ORiEN壳实战

    作者:Fly2015 ORiEN这种壳之前没有接触,到底是压缩壳还是加密壳也不知道,只能试一试喽.需要脱壳的程序是吾爱破解脱壳练习第7期的题目. 首先对加壳程序进行查壳,这一步也是程序脱壳的必要的一步 ...

  9. Windows核心编程 第四章 进程(上)

    第4章 进 程     本章介绍系统如何管理所有正在运行的应用程序.首先讲述什么是进程,以及系统如何创建进程内核对象,以便管理每个进程.然后将说明如何使用相关的内核对象来对进程进行操作.接着,要介绍进 ...

  10. dependencyManagement 版本管理

    帮别人解决bug的时候碰到,随便记录一下. 使用<dependencyManagement>标签, 做版本管理的时候,需要父子项目关联,就需要子模块中利用<parent> 否则 ...