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中操作列表之List.append()方法的使用
May 20 Python
Python字符串处理实例详解
May 18 Python
python学习笔记之列表(list)与元组(tuple)详解
Nov 23 Python
Python网络爬虫中的同步与异步示例详解
Feb 03 Python
对pycharm代码整体左移和右移缩进快捷键的介绍
Jul 16 Python
Python+Redis实现布隆过滤器
Dec 08 Python
python 多维高斯分布数据生成方式
Dec 09 Python
新手学习Python2和Python3中print不同的用法
Jun 09 Python
pycharm全局搜索的具体步骤
Jul 28 Python
浅析Python打包时包含静态文件处理方法
Jan 15 Python
对pytorch中x = x.view(x.size(0), -1) 的理解说明
Mar 03 Python
python 定义函数 返回值只取其中一个的实现
May 21 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/06/20 PHP
php中strtotime函数用法详解
2014/11/15 PHP
php进行md5加密简单实例方法
2019/09/19 PHP
判断客户端浏览器是否安装了Flash插件的多种方法
2010/08/11 Javascript
jquery png 透明解决方案(推荐)
2010/08/21 Javascript
jquery 扑捉回车键事件代码
2014/04/24 Javascript
Nodejs中自定义事件实例
2014/06/20 NodeJs
整理Javascript数组学习笔记
2015/11/29 Javascript
nodeJS删除文件方法示例
2016/12/25 NodeJs
JavaScript实现离开页面前提示功能【附jQuery实现方法】
2017/09/26 jQuery
详解vue添加删除元素的方法
2018/06/30 Javascript
vue this.reload 方法 配置
2018/09/12 Javascript
js实现ATM机存取款功能
2020/10/27 Javascript
原生js实现抽奖小游戏
2019/06/27 Javascript
layui 表格操作列按钮动态显示的实现方法
2019/09/06 Javascript
详解vue或uni-app的跨域问题解决方案
2020/02/21 Javascript
原生JavaScript之es6中Class的用法分析
2020/02/23 Javascript
python实现从字符串中找出字符1的位置以及个数的方法
2014/08/25 Python
Python实现批量更换指定目录下文件扩展名的方法
2016/09/19 Python
Python实现向服务器请求压缩数据及解压缩数据的方法示例
2017/06/09 Python
机器学习10大经典算法详解
2017/12/07 Python
Python简单实现查找一个字符串中最长不重复子串的方法
2018/03/26 Python
python basemap 画出经纬度并标定的实例
2019/07/09 Python
3行Python代码实现图像照片抠图和换底色的方法
2019/10/10 Python
python 实现多维数组转向量
2019/11/30 Python
CSS3支持IE6, 7, and 8的边框border属性
2012/12/28 HTML / CSS
使用HTML5 Canvas绘制直线或折线等线条的方法讲解
2016/03/14 HTML / CSS
美国潜水装备、水肺潜水和浮潜设备商店:Leisure Pro
2018/08/08 全球购物
Nike澳大利亚官网:Nike.com (AU)
2019/06/03 全球购物
求∏的近似值,直到最后一项的绝对值小于指定的数
2016/02/12 面试题
《三峡》教学反思
2014/03/01 职场文书
行政执法队伍作风整顿个人剖析材料
2014/10/11 职场文书
博士生专家推荐信
2015/03/25 职场文书
学习心理学心得体会
2016/01/22 职场文书
MySQL窗口函数的具体使用
2021/11/17 MySQL
深入理解go缓存库freecache的使用
2022/02/15 Golang