zoukankan      html  css  js  c++  java
  • Django中多数据库的读写分离、一主多从及分库分表的使用

    配置方法

    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.sqlite3',
            'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
        },
        'db2': {
            'ENGINE': 'django.db.backends.sqlite3',
            'NAME': os.path.join(BASE_DIR, 'db2.sqlite3'),
        },
    }

    多个数据库的迁移

      默认迁移的是default,当然也可以指定迁移的数据库:

    python manage.py migrate --database db2

    Django多个数据库的读写分离、一主多从及分库分表

    手动方法

      在进行ORM查询的时候指定对应的数据库就好了:

    models.Student.objects.using('db2').all()
    
    obj = models.Student.objects.using('db2').get(name='zhazha')
    obj.name = 'star'
    obj.save(using='default')

    自动方法

    settings中:

    # 自定义的类写在了myrouter.py文件中的Router类中
    DATABASE_ROUTERS = ['myrouter.Router']

    自定义类:

    class Router:
        """
        读写分离
        
        """
    
        def db_for_write(self, model, **kwargs):
            return 'db2'
    
        def db_for_read(self, model, **kwargs):
            return 'default'

    一主多从:

    class Router:
        """
        一主多从
        """
    
        def db_for_write(self, model, **kwargs):
            return 'db1'
    
        def db_for_read(self, model, **kwargs):
            return random.choices['db2', 'db3', 'db4']

    分库分表:

    class Router:
        """
        分库分表
    
        app01  model   db1
        app02  model   db2
        """
    
        def db_for_write(self, model, **kwargs):
         # 获取应用的名称 app_name
    = model._meta.app_label if app_name == 'app01': return 'db1' elif app_name == 'app02': return 'db2' def db_for_read(self, model, **kwargs):
         # 获取应用的名称 app_name
    = model._meta.app_label if app_name == 'app01': return 'db1' elif app_name == 'app02': return 'db2'

    ~~

  • 相关阅读:
    centos7安装puppet详细教程(简单易懂,小白也可以看懂的教程)
    centos7.3下安装nginx
    JS实现转动随机数抽奖的特效代码
    【孤独旅者】封装一个三级联动和基于Vue的mintUI三级联动
    【孤独旅者】Vue-封装$on,$emit,$off
    数据可视化,选择Echarts还是Highcharts?
    关于redux和react-redux
    vue 封装一个插件
    vue实现点击回到顶部
    vue实现吸顶
  • 原文地址:https://www.cnblogs.com/paulwhw/p/8656426.html
Copyright © 2011-2022 走看看