django实现读写分离

时间:2021-08-24
本文章向大家介绍 django实现读写分离,主要包括 django实现读写分离使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

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

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 自动指定(在项目根目录下建立一个 db_router.py的文件,写router和配置setting)

class Router1:
    def db_for_read(self, model, **hints):
        return 'db1'  #指定读就是用db1操作
    def db_for_write(self, model, **hints):
        return 'default'  #指定写就是用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':   #只要是关于这个模型的操作全部去db1中去操作
            return 'db1'
        else:
            return 'default'

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

6 在数据库迁移时,可以指定把哪个app的表结构迁移到哪个库

python manage.py migrate app01 --database=default

原文地址:https://www.cnblogs.com/niuyeji648/p/15181986.html