django-多个数据库配置
1 django
多个数据库
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME':'orm16',
'USER':'root',
'PASSWORD':'123',
'HOST':'127.0.0.1',
'PORT':3306
}
'db2': {
'ENGINE': 'django.db.backends.mysql',
'NAME':'orm2222',
'USER':'root',
'PASSWORD':'123',
'HOST':'127.0.0.1',
'PORT':3306
}
}
2 迁移
python manage.py migrate --database db2
3 读写分离
手动
obj = models.Student.objects.using('db2').get(pk=1) 指定数据库
obj.save(using='db2')
自动
同级项目创建一个py文件 myrouter
class Router:
def db_for_read(self,model,**kwargs):
return 'default'
def db_for_wirte(self,model,**kwargs):
return 'db2'
settings里写
DATABASE_ROUTERS = ['myrouter.Router']
4 一主多从
同级项目创建一个py文件 myrouter
import random
class Router:
"""一主多从"""
def db_for_read(self,model,**kwargs):
return random.choice(['db1','db2','db3'])
def db_for_wirte(self,model,**kwargs):
return 'db2'
5 分库分表
同级项目创建一个py文件 myrouter
import random
class Router:
"""分库分表
app01 default
app02 db2
"""
def db_for_read(self,model,**kwargs):
if model.__meta.app_label == 'app01':
return 'default'
elif model.__meta.app_label == 'app02':
return 'db2'
def db_for_wirte(self,model,**kwargs):
if model.__meta.app_label == 'app01':
return 'default'
elif model.__meta.app_label == 'app02':
return 'db2'

浙公网安备 33010602011771号