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内置函数之filter map reduce介绍
Nov 30 Python
Python错误提示:[Errno 24] Too many open files的分析与解决
Feb 16 Python
Python工程师面试必备25条知识点
Jan 17 Python
安装python3的时候就是输入python3死活没有反应的解决方法
Jan 24 Python
使用Scrapy爬取动态数据
Oct 21 Python
基于python生成器封装的协程类
Mar 20 Python
Python中print和return的作用及区别解析
May 05 Python
Flask配置Cors跨域的实现
Jul 12 Python
Python如何通过百度翻译API实现翻译功能
Apr 02 Python
python pip如何手动安装二进制包
Sep 30 Python
python 获取剪切板内容的两种方法
Nov 28 Python
如何用python 操作zookeeper
Dec 28 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 Ajax实现页面无刷新发表评论
2007/01/02 PHP
给apache2.2加上mod_encoding模块後 php5.2.0 处理url出现bug
2007/04/12 PHP
PHPwind整合最土系统用户同步登录实现方法
2010/12/08 PHP
php中关于普通表单多文件上传的处理方法
2011/03/25 PHP
php文本转图片自动换行的方法
2013/03/13 PHP
smarty基础之拼接字符串的详解
2013/06/18 PHP
php中mt_rand()随机数函数用法
2014/11/24 PHP
thinkphp,onethink和thinkox中验证码不显示的解决方法分析
2016/06/06 PHP
JS localStorage实现本地缓存的方法
2013/06/22 Javascript
jquery获取div距离窗口和父级dv的距离示例
2013/10/10 Javascript
jquery showModelDialog的使用方法示例详解
2013/11/19 Javascript
jQuery.event兼容各浏览器的event详细解析
2013/12/18 Javascript
JS 弹出层 定位至屏幕居中示例
2014/05/21 Javascript
jQuery实现折线图的方法
2015/02/28 Javascript
一个用jquery写的判断div滚动条到底部的方法【推荐】
2016/04/29 Javascript
jQuery实现拖拽页面元素并将其保存到cookie的方法
2016/06/12 Javascript
完美解决IE9浏览器出现的对象未定义问题
2016/09/29 Javascript
JavaScript方法_动力节点Java学院整理
2017/06/28 Javascript
jQuery选择器_动力节点Java学院整理
2017/07/05 jQuery
Angular实现的进度条功能示例
2018/02/18 Javascript
js Element Traversal规范中的元素遍历方法
2018/04/19 Javascript
vue项目每30秒刷新1次接口的实现方法
2018/12/04 Javascript
JS设置自定义快捷键并实现图片上下左右移动
2019/10/17 Javascript
详解vue修改elementUI的分页组件视图没更新问题
2020/11/13 Javascript
PyQt5每天必学之单行文本框
2018/04/19 Python
python动态进度条的实现代码
2019/07/03 Python
Python新手学习函数默认参数设置
2020/06/03 Python
keras:model.compile损失函数的用法
2020/07/01 Python
7 For All Mankind官网:美国加州洛杉矶的高级牛仔服装品牌
2018/12/20 全球购物
西班牙香水和化妆品连锁店:Druni
2019/05/05 全球购物
拉斯维加斯城市观光通行证:Las Vegas Pass
2019/05/21 全球购物
Feelunique中文官网:欧洲最大化妆品零售电商
2020/07/10 全球购物
房地产销售计划书
2014/01/10 职场文书
大学生毕业鉴定
2014/01/31 职场文书
抵押贷款承诺书
2014/05/30 职场文书
雄兵连:第三季先行图公开,天使恶魔联合,银河之力的新力量
2021/06/11 国漫