使用django做mysql读写分离
一、先创建一个django项目
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 = [ url(r'^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 app名称 --databse=配置文件数据名称的别名
主库和从库都能查询用django创建的表
6.往数据库内插一条数据 (设置之后访问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')
主从库都插入了数据
7.前面选定插入数据库都是使用using,还有一种自动操作的方式
在根目录下创建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',]
以后往主库中插入数据或者从库中读取数据就不用再指明使用哪个数据库
from django.shortcuts import render,HttpResponse from app01.models import Book # Create your views here. def index(request): #往主库里插一条数据 Book.objects.create(title="yy",price=20) return HttpResponse('ok')