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实现读写分离的主要内容,如果未能解决你的问题,请参考以下文章