Django项目配置多个数据库

给一个项目配置多个数据库,不同app里的model对应不同的数据库

settings中的设置

 1 # 设置3个数据库
 2
 3 DATABASES = {
 4     ‘users_base‘: {
 5         ‘ENGINE‘: ‘django.db.backends.mysql‘,
 6         "HOST": "127.0.0.1",
 7         "NAME": "thunder_blended_learning",
 8         "PASSWORD": "root",
 9         "USER": "root",
10         "PORT": 3306,
11         ‘OPTIONS‘: {‘charset‘: ‘utf8mb4‘},
12     },
13     ‘cms‘: {
14         ‘ENGINE‘: ‘django.db.backends.mysql‘,
15         "HOST": "127.0.0.1",
16         "NAME": "thunder_blended_learning",
17         "PASSWORD": "root",
18         "USER": "root",
19         "PORT": 3306,
20         ‘OPTIONS‘: {‘charset‘: ‘utf8mb4‘},
21     },
22     ‘default‘: {
23         ‘ENGINE‘: ‘django.db.backends.mysql‘,
24         "HOST": "127.0.0.1",
25         "NAME": "xuetangx",
26         "PASSWORD": "root",
27         "USER": "root",
28         "PORT": 3306,
29         ‘OPTIONS‘: {‘charset‘: ‘utf8mb4‘},
30     }
31 }
32
33 # 不同app可能对应不同的db,注意在本站app: cms,users_base,users_up不允许被migrate
34 DATABASE_ROUTERS = [‘new_xuetangx.app_db_router.UsersBaseDBRouter‘,‘new_xuetangx.app_db_router.CmsDBRouter‘]

app_db_router文件中设置不同的app对应的数据库的名字,没有指定数据库的app用默认的default数据库

 1 class UsersBaseDBRouter(object):
 2     """
 3     A router to control all database operations on models in the
 4     auth application.
 5     """
 6     def db_for_read(self, model, **hints):
 7         """
 8         Attempts to read auth models go to auth_db.
 9         """
10         if model._meta.app_label == ‘users_base‘:
11             return ‘users_base‘
12         if model._meta.app_label == ‘auth‘:
13             return ‘users_base‘
14         return None
15
16     def db_for_write(self, model, **hints):
17         """
18         Attempts to write auth models go to auth_db.
19         """
20         if model._meta.app_label == ‘users_base‘:
21             return ‘users_base‘
22         if model._meta.app_label == ‘auth‘:
23             return ‘users_base‘
24         return None
25
26     def allow_relation(self, obj1, obj2, **hints):
27         """
28         Allow relations if a model in the auth app is involved.
29         """
30         if obj1._meta.app_label == ‘users_base‘ or 31                 obj2._meta.app_label == ‘users_base‘:
32             return True
33         if obj1._meta.app_label == ‘auth‘ or 34                 obj2._meta.app_label == ‘auth‘:
35             return True
36         return None
37     def allow_migrate(self, db, app_label, model_name=None, **hints):
38         """
39         do not allow migrate to users_base‘s db.
40         """
41         if db == ‘users_base‘ or app_label == ‘users_base‘ or app_label == ‘auth‘:
42             return False
43         else:
44             return None
45
46
47 class CmsDBRouter(object):
48     """
49     A router to control all database operations on models in the
50     auth application.
51     """
52     def db_for_read(self, model, **hints):
53         """
54         Attempts to read auth models go to auth_db.
55         """
56         if model._meta.app_label == ‘cms‘:
57             return ‘cms‘
58         return None
59
60     def db_for_write(self, model, **hints):
61         """
62         Attempts to write auth models go to auth_db.
63         """
64         if model._meta.app_label == ‘cms‘:
65             return ‘cms‘
66         return None
67
68     def allow_relation(self, obj1, obj2, **hints):
69         """
70         Allow relations if a model in the auth app is involved.
71         """
72         if obj1._meta.app_label == ‘cms‘ or 73                 obj2._meta.app_label == ‘cms‘:
74             return True
75         return None
76     def allow_migrate(self, db, app_label, model_name=None, **hints):
77         """
78         do not allow migrate to cms‘s db.
79         """
80         if db == ‘cms‘ or app_label == ‘cms‘:
81             return False
82         else:
83             return None

上述设置表示,app:auth , users_base 使用users_base 数据库,可读可写,可以在app内进行表关联操作,不可以进行migrate操作

app:cms 使用cms 数据库,可读可写,可以在app内进行表关联操作,不可以进行migrate操作

其他的app使用default 数据库

 1 class LmsDBRouter(object):
 2     """
 3     A router to control all database operations on models in the
 4     auth application.
 5     """
 6     def db_for_read(self, model, **hints):
 7         """
 8         Attempts to read auth models go to auth_db.
 9         """
10         if model._meta.app_label == ‘lms‘:
11             return ‘default‘
12         return None
13
14     def db_for_write(self, model, **hints):
15         """
16         Attempts to write auth models go to auth_db.
17         """
18         if model._meta.app_label == ‘lms‘:
19             return ‘default‘
20         return None
21
22     def allow_relation(self, obj1, obj2, **hints):
23         """
24         Allow relations if a model in the auth app is involved.
25         """
26         if obj1._meta.app_label == ‘lms‘ or 27                 obj2._meta.app_label == ‘lms‘:
28             return True
29         return None
30     def allow_migrate(self, db, app_label, model_name=None, **hints):
31         """
32         can only migrate lms app. Other app are not allowed to be migrated here
33         """
34         if app_label == ‘lms‘:
35             return db == ‘default‘
36         return False

上述设置表示,app:lms 使用 default 数据库,可读可写,可以在app内进行表关联操作,可以进行migrate操作

另外若不写上述lms的配置,也能起到相应的作用,再次写出仅供学习之用

参考官网:https://docs.djangoproject.com/en/2.1/topics/db/multi-db/

原文地址:https://www.cnblogs.com/liuguniang/p/10364534.html

时间: 2024-11-05 18:26:55

Django项目配置多个数据库的相关文章

【5】Django项目配置settings.py详解

夫唯不争,故天下莫能与之争 --老子<道德经> 本节内容 1.项目配置文件settings.py介绍 2.数据库配置[MySQL] 3.创建模型对象并和数据库同步 4.python官方提供的项目后台管理平台的使用 注意:本节内容我们会按照三部分进行分步讲解 我们创建好了一个Python项目(mysite/)之后,需要在项目中添加模块应用(polls/),在模块应用中添加处理功能逻辑,如添加模块中的视图处理函数(polls.views.index()),这是一个python项目简单的结构模型 但

Django相关配置(包括数据库、templates、static等)信息—Django2.0

1.项目路径配置 2.调试阶段DEBUG =Ture,在调试中会自动检测代码是否发生更改,项目上线后,改为False,否则会泄露系统相关信息 3静态资源配置 # https://docs.djangoproject.com/en/2.0/howto/static-files/ STATIC_URL = '/static/' 上述配置信息将静态资源存放在static中,而文件夹static只能存放于App中.创建app为index,在index中添加文件夹static, 存放静态文件.如果将sta

django项目配置

在使用pycharm创建项目后和app后.需要对项目进行配置. 1.数据库配置 settings.py ----------- DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'dbtest', 'USERNAME': 'root', 'PASSWORD': '', 'CHARSET': 'UTF8' } } __init__.py ----------- import pymysql pymysq

为django项目配置celery的后台启动

为root用户启动celery创建的脚本,该脚本的拥有者与使用者都必须是root .使用方法为 /etc/init.d/celeryd [start]|[stop]|[kill] 需增加两个文件 /etc/default/celeryd(配置脚本) 和 /etc/init.d/celeryd (启动脚本) 1.编辑 /etc/default/celeryd : # Names of nodes to start # most people will only start one node: CE

django之配置使用MySQL数据库及其兼容性问题

一.修改settings.py中的默认数据库配置 DATABASES = { # 'default': { # 'ENGINE': 'django.db.backends.sqlite3', # 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), # } 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'bbs', 'USER': 'root', 'PASSWORD': '123456'

Web框架之Django_02基本操作(Django项目启动配置、数据库连接、orm、增删改查)

摘要: Django项目简单现实过程 pycharm连接数据库 Django之orm简单操作增删改查 一.新建Django项目.配置.设置: 新建Django项目:(为了熟悉Django操作,暂时全部用cmd形式来实现,很多地方需要手动添加)项目目录D:\Django: >>管理员权限打开cmd,通过cmd命令进入项目目录 >>django-admin startproject my_Dproject (创建项目) >>cd my_Dproject (进入项目文件夹)

2.3、django项目对数据库的操作

在讲django项目对数据库操作之前先看看MyOSS/MyOSS的几个文件吧. /MyOSS …__init__py #在python里,不管是class,还是django里的project和app都一个这个的文件,表示初始化该类或者模块 …settings.py #Django项目主要的配置文件,比如数据库引擎,数据库配置,语言,字符编码,支持的调试模式,时区,已经加载的模块,静态文件目录,根目录的URL配置等等.. …models.py #Django项目数据库映射文件. …urls.py

Django models数据库配置以及多数据库联用设置

今天来说说web框架Django怎么配置使用数据库,也就是传说中MVC(Model View Controller)中的M,Model(模型). 简单介绍一下Django中的MVC: 模型(model):定义你的数据库,一般都在models.py文件中. 视图(view):定义你的HTML等静态网页文件相关,也就是那些html.css.js等前端的东西. 控制器(controller):定义你的业务逻辑相关,就是你的主要代码. 正文开始 首先要在你的Django项目中找到两个文件:setting

Pycharm中的Django项目连接mysql数据库

一.安装Pycharm和Django就不详细说了,自行百度 二.新建Django项目也不说了 三.配置Django连接到mysql 1.models.py写一个类,继承models.Model class Book(models.Model): name=models.CharField(max_length=20) price=models.IntegerField() pub_date=models.DateField() 2.修改settings.py文件 DATABASES = { 'd