创建数据库:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME':'default', 'HOST': '127.0.0.1', # 主服务器的运行ip 'PORT': 3306, # 主服务器的运行port 'USER': 'root', # 主服务器的用户名 'PASSWORD': '123456', # 主服务器的密码 }, 'slave': { 'ENGINE': 'django.db.backends.mysql', 'NAME':'slave', 'HOST': '127.0.0.1', 'PORT': 3306, 'USER': 'root', 'PASSWORD': '123456', } }
模型建表:
from django.db import models # Create your models here. class Article(models.Model): #verbose_name在admin中显示该字段的中文 title = models.CharField(max_length=64) #文章摘要 desc = models.CharField(max_length=255)
数据库迁移:
python manage.py makemigrations # 在migrations文件夹下生成记录 python manage.py migrate --database default # 默认可以不写参数 python manage.py migrate --database slave # 在从库再迁移一次,就可以在上面建立相同的表
在项目的app中创建db_router.py文件,并在该文件中定义一个数据库路由类,用来进行读写分离,这个类最多提供四个方法,分别是:db_for_read
、db_for_write
、allow_relation
、allow_migrate
,以下只写了三个。
class MasterSlaveDBRouter(object): """数据库主从读写分离路由""" def db_for_read(self, model, **hints): """读数据库""" return "slave" def db_for_write(self, model, **hints): """写数据库""" return "default" def allow_relation(self, obj1, obj2, **hints): """是否运行关联操作""" return True
注意在settings.py中进行配置:
DATABASE_ROUTERS = ["app001.db_router.MasterSlaveDBRouter"]
视图函数即可操作:
def write(request):
models.Article.objects.create(title='红楼梦',desc='good')
#使用using('default')可以指定数据库
return HttpResponse('写成功')
def read(request):
obj = models.Article.objects.filter(title='西游记').first()
print(obj.title)
return HttpResponse('读成功')