Django app配置多个数据库代码实例


Posted in Python onDecember 17, 2019

这篇文章主要介绍了Django app配置多个数据库代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

每个app使用不同的数据库

1. 配置数据库连接

# settings.py
# DATABASES中必须要有default字段
DATABASES = {
  'default': {
    'ENGINE': 'django.db.backends.mysql',
    'NAME': 'db',
    'USER': '',
    'PASSWORD': '',
    'HOST': "localhost",
    'OPTIONS': {'init_command': 'SET default_storage_engine=INNODB;'}
    },
  'db1': {
    'ENGINE': 'django.db.backends.mysql',
    'NAME': 'db1',
    'USER': '',
    'PASSWORD': '',
    'HOST': "localhost",
    'OPTIONS': {'init_command': 'SET default_storage_engine=INNODB;'}
  }
  }

2. 配置数据库路由

# settings.py
DATABASES_APPS_MAPPING = {
  'app1': 'default',
  'app2': 'db1',
}

DATABASE_ROUTERS = ['utils.database_router.DatabaseAppsRouter']

3. 数据库路由文件:

from django.conf import settings


class DatabaseAppsRouter(object):
  def db_for_read(self, model, **hints):
    app_label = model._meta.app_label
    if app_label in settings.DATABASES_APPS_MAPPING:
      return settings.DATABASES_APPS_MAPPING[app_label]
    return None

  def db_for_write(self, model, **hints):
    app_label = model._meta.app_label
    if app_label in settings.DATABASES_APPS_MAPPING:
      return settings.DATABASES_APPS_MAPPING[app_label]
    return None

至此,使用app1的model会访问default数据库,使用app2的model会访问db1数据库

同一个app下使用不同数据库

只需要在model class中修改app_label的值即可,app_label默认为此model所在app的名称

class Book2(models.Model):
  author = models.CharField(max_length=1024, blank=True, null=True)
  title = models.CharField(max_length=1024)

  class Meta:
    app_label = 'db1'

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python人脸识别初探
Dec 21 Python
Python cookbook(数据结构与算法)保存最后N个元素的方法
Feb 13 Python
Python查找第n个子串的技巧分享
Jun 27 Python
Python实现图片拼接的代码
Jul 02 Python
Python迭代器与生成器用法实例分析
Jul 09 Python
python之cv2与图像的载入、显示和保存实例
Dec 05 Python
Python生成指定数量的优惠码实操内容
Jun 18 Python
Python3 sys.argv[ ]用法详解
Oct 24 Python
tensorflow 实现自定义梯度反向传播代码
Feb 10 Python
Django+python服务器部署与环境部署教程详解
Mar 30 Python
PyQt5 显示超清高分辨率图片的方法
Apr 11 Python
Python基础之数据类型知识汇总
May 18 Python
python关闭占用端口方式
Dec 17 #Python
Django生成PDF文档显示网页上以及PDF中文显示乱码的解决方法
Dec 17 #Python
Django对接支付宝实现支付宝充值金币功能示例
Dec 17 #Python
Django后端发送小程序微信模板消息示例(服务通知)
Dec 17 #Python
Django项目使用ckeditor详解(不使用admin)
Dec 17 #Python
python主线程与子线程的结束顺序实例解析
Dec 17 #Python
Django通用类视图实现忘记密码重置密码功能示例
Dec 17 #Python
You might like
php中并发读写文件冲突的解决方案
2013/10/25 PHP
PHP内核探索:变量概述
2014/01/30 PHP
Laravel的throttle中间件失效问题解决方法
2016/10/09 PHP
详解PHP字符串替换str_replace()函数四种用法
2017/10/13 PHP
漂亮的widgets,支持换肤和后期开发新皮肤
2007/04/23 Javascript
IE8 原生JSON支持
2009/04/13 Javascript
基于jQuery的弹出消息插件 DivAlert之旅(一)
2010/04/01 Javascript
Eclipse去除js(JavaScript)验证错误
2014/02/11 Javascript
jquery中页面Ajax方法$.load的功能使用介绍
2014/10/20 Javascript
Javascript编程中几种继承方式比较分析
2015/11/28 Javascript
Angular.js组件之input mask对input输入进行格式化详解
2017/07/10 Javascript
vuex如何重置所有state(可定制)
2019/01/17 Javascript
vue基于两个计算属性实现选中和全选功能示例
2019/02/08 Javascript
layui使用数据表格实现购物车功能
2019/07/26 Javascript
js实现数字从零慢慢增加到指定数字示例
2019/11/07 Javascript
ES2020 已定稿,真实场景案例分析
2020/05/25 Javascript
vue实现一个6个输入框的验证码输入组件功能的实例代码
2020/06/29 Javascript
[02:07]DOTA2新英雄展现中国元素,完美“圣典”亮相央视
2016/12/19 DOTA
查看Python安装路径以及安装包路径小技巧
2015/04/28 Python
Python设计模式中单例模式的实现及在Tornado中的应用
2016/03/02 Python
Python实现的多线程http压力测试代码
2017/02/08 Python
Python有序查找算法之二分法实例分析
2017/12/11 Python
python networkx 包绘制复杂网络关系图的实现
2019/07/10 Python
基于django ManyToMany 使用的注意事项详解
2019/08/09 Python
详解Python可视化神器Yellowbrick使用
2019/11/11 Python
Python Sympy计算梯度、散度和旋度的实例
2019/12/06 Python
python爬虫模块URL管理器模块用法解析
2020/02/03 Python
酒吧员工的岗位职责
2013/11/26 职场文书
毕业生自我鉴定
2013/12/04 职场文书
保安自我鉴定范文
2013/12/08 职场文书
考试作弊检讨书
2015/01/27 职场文书
年会邀请函范文
2015/01/30 职场文书
保管员岗位职责
2015/02/14 职场文书
python3.9之你应该知道的新特性详解
2021/04/29 Python
MySQL分区表实现按月份归类
2021/11/01 MySQL
SQL使用复合索引实现数据库查询的优化
2022/05/25 SQL Server