库的配置

1.读写分离

  • settings配置
#settings.py 配置库信息,生成2个库

DATABASES = {
'default': {
'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'),
},
} python3 manage.py makemigrations #生成迁移文件
python3 manage.py migrate --database db2 #db2数据库迁移
  • 手动操作
ret = model.Student.objects.all().using('db2')#查询db2库所有数据

models.Student.object.using("default").create(name='xxoo')#往default库写入信息

#db2查询name='ss',并更改name,并保存在default库中
obj = models.Stundet.objects.using('db2').get(name='ss')
obj.name = "sha"
obj.save(using="default")
  • 自动操作
#myrouter.py

class Router:
def db_for_write(self,model,**kwargs):
return "db2" def db_for_read(self,model,**kwargs):
return "default"
#settings.py配置
DATABASE_ROUTERS=['myrouter.Router',]

2.一主多从

#myrouter.py

class Router:
def db_for_write(self,model,**kwargs):
return "default" def db_for_read(self,model,**kwargs):
return random.choice(['db2','db3',"db4"])
#settings.py配置
DATABASE_ROUTERS=['myrouter.Router',]

3.分库分表

  • 分库:
#settings.py配置
#myrouter.py
class Router:
"""
app01 model db1
app02 model db2
"""
def db_for_write(self,model,**kwargs):
app_name = model._meta.app_label#此操作能获得app的名字
if app_name == "app01":
return "db1"
elif app_name == "app02":
return "app02" def db_for_read(self,model,**kwargs):
app_name = model._meta.app_label#此操作能获得app的名字
if app_name == "app01":
return "db1"
elif app_name == "app02":
return "app02"

4.Django执行原生SQL

  • 单起一个文件
import os
import django
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "temp.settings")
djnago.setup()
#以上配置django环境 #extra方法:
from app01 import models
#从Student,找id大于1的对象值
ret = models.Student.object.all().extra(where=['id>%s'],params=['1']).values()
print(ret) #raw方法:
ret = models.Student.objects.raw('select * from main.app01_classes')
print(ret)
for i in ret:
print(i)#拿到学生对象
#connection方法:
from django.db import connections
#cursor = connections.cursor()
cursor = connections['db2'].cursor()#指向db2库
cursor.execute("""select * from main.app_classes where id=%s""",[1,])
row = cursor.fetchall()
print(row)

Django:实现读写分离的更多相关文章

  1. docker配置mysql主从与django实现读写分离

    一.搭建主从mysql环境 1 下载mysql镜像 docker pull mysql:5.7 2 运行刚下载的mysql镜像文件 # 运行该命令之前可以使用`docker images`是否下载成功 ...

  2. django数据库读写分离

    django数据库读写分离 1. 配置数据库 settings.py文件中 用SQLite: DATABASES = { 'default': { 'ENGINE': 'django.db.backe ...

  3. Django13 /缓存、信号、django的读写分离

    Django13 /缓存.信号.django的读写分离 目录 Django13 /缓存.信号.django的读写分离 1. 缓存 2. 信号 3. django的读写分离 1. 缓存 缓存简述: 缓存 ...

  4. Django 数据库读写分离 分库分表

    多个数据库 配置: DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BA ...

  5. django数据库读写分离,分库

    读写分离 在settings中配置不同名称的数据库连接参数,并配置一条数据库选择路由 DATABASES = { 'default': { 'ENGINE': 'django.db.backends. ...

  6. 搭建MySQL主从实现Django读写分离

    一.MySQL主从搭建 主从配置原理: 主库写日志到 BinLog 从库开个 IO 线程读取主库的 BinLog 日志,并写入 RelayLog 再开一个 SQL 线程,读 RelayLog 日志,回 ...

  7. (转)Django配置数据库读写分离

    转:https://blog.csdn.net/Ayhan_huang/article/details/78784486 转:http://www.cnblogs.com/dreamer-fish/p ...

  8. Django中MySQL读写分离技术

    最近需要用到Django的MySQL读写分离技术,查了一些资料,把方法整理了下来. 在Django里实现对MySQL的读写分离,实际上就是将不同的读写请求按一定的规则路由到不同的数据库上(可以是不同类 ...

  9. 配置Django中数据库读写分离

    django在进行数据库操作的时候,读取数据与写数据(曾.删.改)可以分别从不同的数据库进行操作 修改配置文件: DATABASES = { 'default': { 'ENGINE': 'djang ...

随机推荐

  1. Spring注解驱动第三讲--@Filter介绍

    上一讲主要针对@ComponentScan注解做了一些说明,本文主要对@Filter的扫描条件,再做一些详细的介绍 1,FilterType.ANNOTATION 按照注解的方式进行扫描.后面clas ...

  2. mysql判断表字段或索引是否存在,然后修改

    判断字段是否存在: DROP PROCEDURE IF EXISTS schema_change; DELIMITER // CREATE PROCEDURE schema_change() BEGI ...

  3. Nodejs 包与 npm第三方模块安装和 package.json 以及 cnpm

    包与 NPM 1. 包 Nodejs 中除了它自己提供的核心模块外,可以自定义模块,也可以使用第三方的模块.Nodejs 中第三方模块由包组成,可以通过包来对一组具有相互依 赖关系的模块进行统一管理. ...

  4. mysql数据库架构设计与优化

    mysql数据库架构设计与优化 2019-04-23 20:51:20 无畏D尘埃 阅读数 179  收藏 更多 分类专栏: MySQL   版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA ...

  5. Heartbeat took longer than "00:00:01" at "09/06/2019 05:08:08 +00:00".

    .netcore在k8s+docker+linux,部署后,偶尔会报这样的警告 Warn:Microsoft.AspNetCore.Server.KestrelHeartbeat took longe ...

  6. java多线程(六)线程控制类

    1.   多线程控制类 为了保证多线程的三个特性,Java引入了很多线程控制机制,下面介绍其中常用的几种: l  ThreadLocal l  原子类 l  Lock类 l  Volatile关键字 ...

  7. Indellij IDEA的菜单 File Edit View等主菜单栏不小心删除,恢复的解决办法

    修改以后保存,重启Idea

  8. 转 Oracle 同一个字段的两值进行加减计算

    https://www.cnblogs.com/hjianguo/p/6041617.html 如 病人ID      入院日期                出院日期 00001      2016 ...

  9. delimiter关键字

    默认的sql语句以分号";"表示结束.mysql解释器每遇到一个分号,执行一段语句.可以通过delimiter更改语句结束符 mysql>delimiter &&am ...

  10. DNS与ARP协议

    DNS(domain name system) DNS的作用:将域名(如baidu.com)转换为IP地址 DNS的本质是:分层的DNS服务器实现的分布式数据库: 根DNS服务器 - com DNS服 ...