django实现读写分离

Posted Palpitate

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了django实现读写分离相关的知识,希望对你有一定的参考价值。

# 0 主从搭建好了

# models.py
from django.db import models


class Book(models.Model):
    name = models.CharField(max_length=32)
    price = models.DecimalField(max_length=5, decimal_places=2)

#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,
    },
}

# 2 手动指定
    ####手动来做
    # 向default库写,主库
    # res=models.Book.objects.using(\'default\').create(name=\'水浒传\',price=33.4)
    # 去从库查
    # res=models.Book.objects.using(\'db1\').all().first()
    # print(res.name)
 
# 3 自动指定(写router和配置setting)
    class Router1:
        def db_for_read(self, model, **hints):
            return \'db1\'
        def db_for_write(self, model, **hints):
            return \'default\'
    
    # 在setting中注册
    # 注册一下
    DATABASE_ROUTERS = [\'db_router.Router1\',]
# 4 以后只要是写操作,就会用default,只要是读操作自动去db1


# 5 更细粒度()
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\'
    
# 6 在数据库迁移时,可以指定把哪个app的表结构迁移到哪个库
python manage.py migrate app01 --database=default

 

以上是关于django实现读写分离的主要内容,如果未能解决你的问题,请参考以下文章

配置 Django 实现数据库读写分离

django实现读写分离

docker部署django项目mysql主从搭建django实现读写分离

Django连接多个数据库并实现读写分离

Django连接多个数据库并实现读写分离

django+centos+mariadb读写分离完美实现(上)-mysql主从备份实现