【django】读写分离

配置多个数据库

1.修改django的settings配置文件

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'),
    }
}

2.执行数据库同步指令,将表结构生成到db2数据库中

python migrate --database db2

读写分离

手动操作

使用using指定使用哪个数据库

from app1 import models
def index(request):
    obj = models.Id.objects.using("db2").all()
    return render(request,"index.html",{"obj":obj})

配置操作

在应用下创建py文件,名字随意

# app1/router
import random
class Router:
	# 指定读所使用的库
    def db_for_read(self,model,**kwargs):
            #获取当前model对象所在的应用名称
        app_name = model._meta.app_label 
        #获取当前操作的model对象的表名
        model_name= model._meta.model_name
        
    	# 返回哪个库名就使用哪个库
        return 'default'
        # 随机使用一个数据库
        return random.choice(['db1','default'])

        
    # 制定写所使用的库
    def db_for_write(self,model,**kwargs):
        return 'db2'

在settings中添加配置

DATABASE_ROUTERS = ['app1.router.Router',] 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值