Django项目同时连接多个不同的数据库(7)

简介: 【7月更文挑战第7天】在Django项目中配置连接多个数据库,你需要:1. 在`settings.py`中配置多个数据库,2. 在`settings.py`内设置数据库路由,指定每个应用使用的数据库,

项目需要连接多个不同的数据库,不同的应用操作不同的库。

以下是具体的修改步骤:

一、修改setting.py中的 DATABASES

DATABASES = {
    'default': {
    },
    'mysql': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'zz', # 数据库名称
        'HOST': '127.0.0.1', # 数据库地址,本机 ip 地址 127.0.0.1
        'PORT': 3306, # 端口
        'USER': 'root',  # 数据库用户名
        'PASSWORD': 'root', # 数据库密码
    },
    'postgress': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'postgres',
        'USER': 'postgres',
        'PASSWORD': '',
        'HOST': '127.0.0.1',
        'PORT': '5432',
    },
}


2、还是在setting.py文件中配置应用对应的数据库


  • # 配置数据库操作路由
  • DATABASE_ROUTERS = ['application.database_router.DatabaseAppsRouter']
  • DATABASE_APPS_MAPPING = {
  • 'app1':'mysql',
  • 'app2':'postgress',
  • }

3、在setting.py同目录下新建 database_router.py文件

image.png


添加以下代码

  • # -*- coding: utf-8 -*-
  • from django.conf import settings
  • DATABASE_MAPPING = settings.DATABASE_APPS_MAPPING
  • class DatabaseAppsRouter(object):
  • """
  •    A router to control all database operations on models for different
  •    databases.
  •    In case an app is not set in settings.DATABASE_APPS_MAPPING, the router
  •    will fallback to the `default` database.
  •    Settings example:
  •    DATABASE_APPS_MAPPING = {'app1': 'db1', 'app2': 'db2'}
  •    """
  • def db_for_read(self, model, **hints):
  • """"Point all read operations to the specific database."""
  • if model._meta.app_label in DATABASE_MAPPING:
  • return DATABASE_MAPPING[model._meta.app_label]
  • return None
  • def db_for_write(self, model, **hints):
  • """Point all write operations to the specific database."""
  • if model._meta.app_label in DATABASE_MAPPING:
  • return DATABASE_MAPPING[model._meta.app_label]
  • return None
  • def allow_relation(self, obj1, obj2, **hints):
  • """Allow any relation between apps that use the same database."""
  •        db_obj1 = DATABASE_MAPPING.get(obj1._meta.app_label)
  •        db_obj2 = DATABASE_MAPPING.get(obj2._meta.app_label)
  • if db_obj1 and db_obj2:
  • if db_obj1 == db_obj2:
  • return True
  • else:
  • return False
  • return None
  • def allow_syncdb(self, db, model):
  • """Make sure that apps only appear in the related database."""
  • if db in DATABASE_MAPPING.values():
  • return DATABASE_MAPPING.get(model._meta.app_label) == db
  • elif model._meta.app_label in DATABASE_MAPPING:
  • return False
  • return None
  • def allow_migrate(self, db, app_label, model=None, **hints):
  • """
  •        Make sure the auth app only appears in the 'auth_db'
  •        database.
  •        """
  • if db in DATABASE_MAPPING.values():
  • return DATABASE_MAPPING.get(app_label) == db
  • elif app_label in DATABASE_MAPPING:
  • return False
  • return None



ok!然后就可以创建模型,在对应的app中操作数据库了。































.

目录
相关文章
|
8月前
|
SQL Java 关系型数据库
Java连接MySQL数据库环境设置指南
请注意,在实际部署时应该避免将敏感信息(如用户名和密码)硬编码在源码文件里面;应该使用配置文件或者环境变量等更为安全可靠地方式管理这些信息。此外,在处理大量数据时考虑使用PreparedStatement而不是Statement可以提高性能并防止SQL注入攻击;同时也要注意正确处理异常情况,并且确保所有打开过得资源都被正确关闭释放掉以防止内存泄漏等问题发生。
364 13
|
8月前
|
SQL 关系型数据库 MySQL
MySQL数据库连接过多(Too many connections)错误处理策略
综上所述,“Too many connections”错误处理策略涉及从具体参数配置到代码层面再到系统与架构设计全方位考量与改进。每项措施都需根据具体环境进行定制化调整,并且在执行任何变更前建议先行测试评估可能带来影响。
1715 11
|
10月前
|
SQL XML Java
配置Spring框架以连接SQL Server数据库
最后,需要集成Spring配置到应用中,这通常在 `main`方法或者Spring Boot的应用配置类中通过加载XML配置或使用注解来实现。
721 0
|
11月前
|
Linux 数据库 数据安全/隐私保护
Python web Django快速入门手册全栈版,共2590字,短小精悍
本教程涵盖Django从安装到数据库模型创建的全流程。第一章介绍Windows、Linux及macOS下虚拟环境搭建与Django安装验证;第二章讲解项目创建、迁移与运行;第三章演示应用APP创建及项目汉化;第四章说明超级用户创建与后台登录;第五章深入数据库模型设计,包括类与表的对应关系及模型创建步骤。内容精炼实用,适合快速入门Django全栈开发。
557 1
|
设计模式 前端开发 数据库
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第27天】本文介绍了Django框架在Python Web开发中的应用,涵盖了Django与Flask等框架的比较、项目结构、模型、视图、模板和URL配置等内容,并展示了实际代码示例,帮助读者快速掌握Django全栈开发的核心技术。
879 45
|
机器学习/深度学习 人工智能 算法
植物病害识别系统Python+卷积神经网络算法+图像识别+人工智能项目+深度学习项目+计算机课设项目+Django网页界面
植物病害识别系统。本系统使用Python作为主要编程语言,通过收集水稻常见的四种叶片病害图片('细菌性叶枯病', '稻瘟病', '褐斑病', '稻瘟条纹病毒病')作为后面模型训练用到的数据集。然后使用TensorFlow搭建卷积神经网络算法模型,并进行多轮迭代训练,最后得到一个识别精度较高的算法模型,然后将其保存为h5格式的本地模型文件。再使用Django搭建Web网页平台操作界面,实现用户上传一张测试图片识别其名称。
871 22
植物病害识别系统Python+卷积神经网络算法+图像识别+人工智能项目+深度学习项目+计算机课设项目+Django网页界面
|
前端开发 搜索推荐 算法
中草药管理与推荐系统Python+Django网页界面+推荐算法+计算机课设系统+网站开发
中草药管理与推荐系统。本系统使用Python作为主要开发语言,前端使用HTML,CSS,BootStrap等技术和框架搭建前端界面,后端使用Django框架处理应用请求,使用Ajax等技术实现前后端的数据通信。实现了一个综合性的中草药管理与推荐平台。具体功能如下: - 系统分为普通用户和管理员两个角色 - 普通用户可以登录,注册、查看物品信息、收藏物品、发布评论、编辑个人信息、柱状图饼状图可视化物品信息、并依据用户注册时选择的标签进行推荐 和 根据用户对物品的评分 使用协同过滤推荐算法进行推荐 - 管理员可以在后台对用户和物品信息进行管理编辑
551 12
中草药管理与推荐系统Python+Django网页界面+推荐算法+计算机课设系统+网站开发
|
机器学习/深度学习 算法 TensorFlow
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
交通标志识别系统。本系统使用Python作为主要编程语言,在交通标志图像识别功能实现中,基于TensorFlow搭建卷积神经网络算法模型,通过对收集到的58种常见的交通标志图像作为数据集,进行迭代训练最后得到一个识别精度较高的模型文件,然后保存为本地的h5格式文件。再使用Django开发Web网页端操作界面,实现用户上传一张交通标志图片,识别其名称。
848 7
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面