首页 > 数据库技术 > 详细

Django操作多个数据库读写分离

时间:2019-08-21 21:05:42      阅读:93      评论:0      收藏:0      [点我收藏+]

创建数据库:

      

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_readdb_for_writeallow_relationallow_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(读成功)

 

 

 

Django操作多个数据库读写分离

原文:https://www.cnblogs.com/sima-3/p/11390757.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!