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中操作数据库了。































.

目录
相关文章
|
4天前
|
运维 Devops 测试技术
一个人活成一个团队:python的django项目devops实战
DevOps通过自动化的流程,使得构建、测试、发布软件能够更加地快捷、频繁和可靠。本文通过一个python的django个人博客应用进行了DevOps的实战,通过DevOps拉通开发和运维,通过应用云效的DevOps平台实现自动化“软件交付”的流程,使得构建、测试、发布软件能够更加地快捷、频繁和可靠,提交研发交付效率。作为个人项目也是可以应用devops提高效率。
16 3
|
3天前
|
前端开发 数据库
SpringBoot+Vue+token实现(表单+图片)上传、图片地址保存到数据库。上传图片保存位置到项目中的静态资源下、图片可以在前端回显(二))
这篇文章是关于如何在SpringBoot+Vue+token的环境下实现表单和图片上传的优化篇,主要改进是将图片保存位置从磁盘指定位置改为项目中的静态资源目录,使得图片资源可以跨环境访问,并在前端正确回显。
|
5天前
|
SQL 存储 Java
完整java开发中JDBC连接数据库代码和步骤
该博客文章详细介绍了使用JDBC连接数据库的完整步骤,包括加载JDBC驱动、提供连接URL、创建数据库连接、执行SQL语句、处理结果以及关闭JDBC对象的过程,并提供了相应的示例代码。
|
5天前
|
SQL Java 数据库连接
连接数据库修改用户信息
该博客文章通过Java JDBC代码示例演示了如何连接SQL Server数据库,并执行更新操作来修改用户信息,具体将小张的工作改为教授,并检查更新操作是否成功。
|
3天前
|
druid Java 数据库连接
SpringBoot项目整合MybatisPlus持久层框架+Druid数据库连接池,以及实现增删改查功能
SpringBoot项目整合MybatisPlus和Druid数据库连接池,实现基本的增删改查功能。
13 0
|
4天前
|
数据库 知识图谱
知识图谱(Knowledge Graph)- Neo4j 5.10.0 Desktop & GraphXR 连接自建数据库
知识图谱(Knowledge Graph)- Neo4j 5.10.0 Desktop & GraphXR 连接自建数据库
11 0
|
4天前
|
SQL 存储 Java
完整java开发中JDBC连接数据库代码和步骤
该博客文章详细介绍了使用JDBC连接数据库的完整步骤,包括加载JDBC驱动、提供连接URL、创建数据库连接、执行SQL语句、处理结果以及关闭JDBC对象的过程,并提供了相应的示例代码。
|
11天前
|
机器学习/深度学习 数据采集 数据可视化
基于爬虫和机器学习的招聘数据分析与可视化系统,python django框架,前端bootstrap,机器学习有八种带有可视化大屏和后台
本文介绍了一个基于Python Django框架和Bootstrap前端技术,集成了机器学习算法和数据可视化的招聘数据分析与可视化系统,该系统通过爬虫技术获取职位信息,并使用多种机器学习模型进行薪资预测、职位匹配和趋势分析,提供了一个直观的可视化大屏和后台管理系统,以优化招聘策略并提升决策质量。
|
11天前
|
搜索推荐 前端开发 数据可视化
【优秀python web毕设案例】基于协同过滤算法的酒店推荐系统,django框架+bootstrap前端+echarts可视化,有后台有爬虫
本文介绍了一个基于Django框架、协同过滤算法、ECharts数据可视化以及Bootstrap前端技术的酒店推荐系统,该系统通过用户行为分析和推荐算法优化,提供个性化的酒店推荐和直观的数据展示,以提升用户体验。
|
11天前
|
搜索推荐 前端开发 数据可视化
基于Python协同过滤的旅游景点推荐系统,采用Django框架,MySQL数据存储,Bootstrap前端,echarts可视化实现
本文介绍了一个基于Python协同过滤算法的旅游景点推荐系统,该系统采用Django框架、MySQL数据库、Bootstrap前端和echarts数据可视化技术,旨在为用户提供个性化的旅游推荐服务,提升用户体验和旅游市场增长。
基于Python协同过滤的旅游景点推荐系统,采用Django框架,MySQL数据存储,Bootstrap前端,echarts可视化实现