1. 程式人生 > 其它 >django實現讀寫分離

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