django 配置多数据库进行读写分离

DATABASES配置

在Django的配置文件 setting.py 中的DATABASES参数中,添加多个数据库的配置信息。每个数据库都需要指定ENGINE(数据库引擎)和NAME(数据库名称)。

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'master_db',
        'USER': 'master_user',
        'PASSWORD': 'master_password',
        'HOST': 'localhost',
        'PORT': '3306',
    },
    'slave': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'slave_db',
        'USER': 'slave_user',
        'PASSWORD': 'slave_password',
        'HOST': 'localhost',
        'PORT': '3307',
    }
}

方式一:自选读写数据库对象

在需要进行读写操作的地方,可使用.using('default')方法来指定使用哪个数据库进行操作('default'是配置文件中DATABASES定义的数据库对象)。

result = My_Model.objects.filter(id=5).using('default') # .using('slave')

方式二:自动读写分离(推荐)

(一)创建一个Py文件,命名为db_router.py,并在其中定义一个类DBRouter,继承自django.db.utils.BaseDatabaseRouter,该类用于自动路由数据库。在DBRouter类中,需要实现db_for_read()和db_for_write()方法,这两个方法分别用于决定读操作和写操作使用的数据库。

class DBRouter(object):
    def db_for_read(self, model, **hints):
        # 多个从库 ['db1','db2','db3'] ---- 负载 --- random
        
        # 自读数据库
        return 'slave'

    def db_for_write(self, model, **hints):
        # 可写入的数据库
        return 'default'

(二)在Django的配置文件 setting.py 的DATABASE_ROUTERS中,指定使用自定义的DBRouter类来进行数据库路由。

DATABASE_ROUTERS = ['myapp.db_router.DBRouter']

完成!

posted @ 2024-11-08 22:26  二月雪  阅读(17)  评论(0编辑  收藏  举报