首页 > 数据库 >Django--操作mysql实现读写分离

Django--操作mysql实现读写分离

时间:2022-09-22 15:44:05浏览次数:58  
标签:return -- db Django default mysql db1 model

django操作mysql读写分离

# 0 mysql主从搭建好了

# 1 在setting中配置
DATABASES = {
    # 主库      
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'lqz1',
        'USER': 'root',
        'PASSWORD': '123456',
        'HOST': '101.133.225.166',
        'PORT': 33307,
    },
    # 从库
    'db1': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'lqz1',
        'USER': 'root',
        'PASSWORD': '123456',
        'HOST': '101.133.225.166',
        'PORT': 33306,
    },
}

# 注:orm的读写 默认就是default库,故:一般主库 别名就叫 default

    
# 2 orm 创建表模型 并迁移
  # 在数据库迁移时,可以指定把哪个app的表结构迁移到哪个库 (settings中数据库的别名)
  python manage.py migrate app01 --database=default  # 不写 默认为 default


# 3 orm 操作表数据  指定使用哪个库进行操作
### 3.1 手动指定
    # 向主库写     不跟using参数  默认为default库
    res=models.Book.objects.using('default').create(name='金1梅',price=33.4)
    
    # 去从库查
    res=models.Book.objects.using('db1').all().first()
    # print(res.name)
    
    
### 3.2 自动指定  写router和配置setting 
    # 1. db_router.py中  写一个Router1类
      class Router1:
          def db_for_read(self, model, **hints):
              return 'db1'
          def db_for_write(self, model, **hints):
              return 'default'
    
    # 2.在setting中注册 DATABASE_ROUTERS
	DATABASE_ROUTERS = ['db_router.Router1',]
      
    # 注:自动指定后,以后只要是写操作就会用default,只要是读操作就会用db1


# 4 更细粒度  Router类的方法  可以指定到某个表   通常是分库分表后 使用
class Router1:
    def db_for_read(self, model, **hints):
        if model._meta.model_name == 'book':
            return 'db1'
        else:
            return 'default'

    def db_for_write(self, model, **hints):
        return 'default'

标签:return,--,db,Django,default,mysql,db1,model
From: https://www.cnblogs.com/Edmondhui/p/16719539.html

相关文章

  • Vi编辑器5
    一、归档tar1tar:归档意思2压缩(建立归档文件):tar-zcvf自定义名字你想要压缩的文件(-z表示使用gzip压缩)3解压(解开归档文件):tar-xf上面自定义的名......
  • Centos关闭telnet服务
    1、关闭telnet有两种方法方法一:#vi/etc/xinetd.d/telnet 将disable=no改为  disable=yes方法二:#chkconfigtelnetoff 2、重启#servicexinetdrestar......
  • 多线程创建connection连接hbase
    publicclassGetconnection{//声明一个静态属性publicstaticConnectionconnection=null;static{//创建连接try{......
  • 企业微信消息推送通用类(仅Text、Markdown、Image、News类型实现,功能完善中)
    1usingxxx.Core.Entity;2usingNewtonsoft.Json;3usingNewtonsoft.Json.Linq;4usingSystem;5usingSystem.Collections.Generic;6usingSystem......
  • Linux文件数据恢复 (XFS & EXT4)
    在Linux中,使用删除命令rm应谨慎。有时重要文件会因为误操作而被删除。这个时候,不要太紧张。如果你操作得当,你仍然可以恢复。EXT类型文件恢复删除文件实际上并不会......
  • 约瑟夫问题
    简介设编号为1,2,…n的n个人围坐一圈,约定编号为k(1<=k<=n)的人从1开始报数,数到m的那个人出列,它的下一位又从1开始报数,数到m的那个人又出列,依次类推,直到所有人......
  • CLIP改进工作串讲(上)学习笔记
    看了跟李沐学AI系列朱毅老师讲的CLIP改进工作串讲,这里记录一下。1.分割分割的任务其实跟分类很像,其实就是把图片上的分类变成像素级别上的分类,但是往往图片上能......
  • LeetCode 70 爬楼梯
    动态规划constintN=50;classSolution{public:intdp[N];intclimbStairs(intn){dp[0]=1;dp[1]=1;for(int......
  • win11的环境变量在哪里
            ......
  • 装饰器详解
    一、闭包了解装饰器前,首先要了解,什么是闭包。闭包就是在一个函数中再定义一个函数,内部函数需要引用外部函数的参数,且外部函数的返回值是内部函数。defoutside(x):......