读写分离
在settings中配置不同名称的数据库连接参数,并配置一条数据库选择路由
DATABASES = {
‘default‘: {
‘ENGINE‘: ‘django.db.backends.sqlite3‘,‘NAME‘: os.path.join(BASE_DIR,‘db.sqlite3‘),},‘db1‘: {
‘ENGINE‘: ‘django.db.backends.sqlite3‘,‘db1.sqlite3‘),}
(1)第一种方法:
手动选择要使用的数据库
m1.UserType.objects.using(‘default‘).create(title=‘VVIP‘)
m2.Users.objects.using(‘db1‘).create(name=‘VVIP‘,email=‘xxx‘)
(2)方法二:
定义一下路由类,自动执行数据类
在seetings 中加入一条配置
DATABASE_ROUTERS = [‘db_router.Router1‘,]
class Router1: def db_for_read(self,model,**hints): """ Attempts to read auth models go to auth_db. """ if model._Meta.model_name == ‘usertype‘: return ‘db1‘ else: ‘default‘ def db_for_write(self,1)"> Attempts to write auth models go to auth_db. return ‘default‘
为读写操作指定类
多应用分库
创建数据库时候执行指定的命令
# 第一步: python manage.py makemigraions 第二步: app01中的表在default数据库创建 python manage.py migrate app01 --database=default 第三步: app02中的表在db1数据库创建 python manage.py migrate app02 --database=db1
对数据库迁移和读写操作进行约束
Router1: def allow_migrate(self,db,app_label,model_name=None,1)"> All non-auth models end up in this pool. """ if db==‘db1‘ and app_label == ‘app02‘: True elif db == ‘default‘ ‘app01‘: : False 如果返回None,那么表示交给后续的router,如果后续没有router,则相当于返回True if model._Meta.app_label == ‘default‘ : ‘db1‘
def db_for_write(self,1)">return ‘db1‘
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。