Django框架(十八):从源码层面达到MySQL读写分离

文章目录

        • 1、settings.py
        • 2、urls.py
        • 3、views.py
        • 4、models.py
        • 5、数据库迁移
        • 6、使用using手动读写分离
        • 7、读写分离自动化

1、settings.py

修改数据库配置:

# 主库
'default': {
     
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'test',
        'USER': 'root',
        'PASSWORD': '123456',
        'HOST': '101.132.167.242',
        'PORT': 33307,
    },
# 从库
'slave': {
     
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'test',
        'USER': 'root',
        'PASSWORD': '123456',
        'HOST': '101.132.167.242',
        'PORT': 33306,
    }

2、urls.py

urlpatterns = [
    path('index/', views.index),
]

3、views.py

from django.shortcuts import HttpResponse

def index(request):
    return HttpResponse('ok')

4、models.py

from django.db import models

class Book(models.Model):
    title=models.CharField(max_length=32)
    price=models.IntegerField()
    ss=models.CharField(max_length=32,default="66")

5、数据库迁移

python manage.py makemigraions
python manage.py migrate 应用名称 --database=配置文件数据名称的别名
python manage.py migrate app01 --database=default

主库迁移了就行了,我做了mysql主从同步

6、使用using手动读写分离

往数据库内插一条数据 (设置之后访问index页面,就会往book表中插入一条数据)

from django.shortcuts import render,HttpResponse
from app01.models import Book
# Create your views here.
def index(request):
    # 往主库里插一条数据
    Book.objects.using("default").create(title="xx",price=10)
    return HttpResponse('ok')

最后主从库都插入了数据,因为我最开始就做了MySQL主从同步的!

7、读写分离自动化

前面选定插入数据库都是使用using,还有一种自动操作的方式

BASE_DIR目录下创建router.py文件

class Router1:
    def db_for_read(self, model, **hints):    #读取数据只用从库
        """
        Attempts to read auth models go to auth_db.
        """
        return 'slave'

    def db_for_write(self, model, **hints):    #写入数据只用主库
        """
        Attempts to write auth models go to auth_db.
        """
        return 'default'

在setting.py文件配置 DATABASE_ROUTERS = ['router.Router1',]
Django框架(十八):从源码层面达到MySQL读写分离_第1张图片

你可能感兴趣的:(#,Web框架,django)