django操作mysql读写分离
# 0 mysql主从搭建好了
# 1 在setting中配置
DATABASES = {
# 主库
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'lqz1',
'USER': 'root',
'PASSWORD': '123456',
'HOST': '101.133.225.166',
'PORT': 33307,
},
# 从库
'db1': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'lqz1',
'USER': 'root',
'PASSWORD': '123456',
'HOST': '101.133.225.166',
'PORT': 33306,
},
}
# 注:orm的读写 默认就是default库,故:一般主库 别名就叫 default
# 2 orm 创建表模型 并迁移
# 在数据库迁移时,可以指定把哪个app的表结构迁移到哪个库 (settings中数据库的别名)
python manage.py migrate app01 --database=default # 不写 默认为 default
# 3 orm 操作表数据 指定使用哪个库进行操作
### 3.1 手动指定
# 向主库写 不跟using参数 默认为default库
res=models.Book.objects.using('default').create(name='金1梅',price=33.4)
# 去从库查
res=models.Book.objects.using('db1').all().first()
# print(res.name)
### 3.2 自动指定 写router和配置setting
# 1. db_router.py中 写一个Router1类
class Router1:
def db_for_read(self, model, **hints):
return 'db1'
def db_for_write(self, model, **hints):
return 'default'
# 2.在setting中注册 DATABASE_ROUTERS
DATABASE_ROUTERS = ['db_router.Router1',]
# 注:自动指定后,以后只要是写操作就会用default,只要是读操作就会用db1
# 4 更细粒度 Router类的方法 可以指定到某个表 通常是分库分表后 使用
class Router1:
def db_for_read(self, model, **hints):
if model._meta.model_name == 'book':
return 'db1'
else:
return 'default'
def db_for_write(self, model, **hints):
return 'default'