Django实现读写分离#
手动实现#
settings.py中配置数据库
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
},
'db1': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
在视图层views.py
def home(request):
# 写数据,在主库中写
user_obj = models.User.objects.create(name="reese").using("default")
# 查数据,去从库中查
user_query = models.User.objects.all().using("db1")
自动实现#
项目路径下创建db_router.py
# db_router.py
class Router1:
def db_for_read(self, model, **hints):
return 'db1'
def db_for_write(self, model, **hints):
return 'default'
settings.py中配置数据库
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
},
'db1': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
DATABASE_ROUTERS = ['db_router.Router1',]
这样配置后,只要是写的操作,都到default上,只要是读的操作,都到db1上了