zoukankan      html  css  js  c++  java
  • Django操作多个数据库读写分离

    创建数据库:

          

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

     

  • 相关阅读:
    编译JDK12
    Hexo Next背景动画Canvas_nest:true设置无效
    素数
    Linux 命令行样式
    四种排序算法实现
    Java中的简单容器
    一个关于2的次方问题
    LeetCode--20.有效的括号
    Java中的注释
    关于Metasploitable的测试
  • 原文地址:https://www.cnblogs.com/sima-3/p/11390757.html
Copyright © 2011-2022 走看看