django 多数据源配置
django 内置了数据的orm 处理以及schema 处理,所以如果需要处理多数据源,那么我们就需要在
migrate以及crud的时候进行处理了,django 提供了方便的多数据源支持处理,migrate 的时候指定
依赖的数据库就可以进行migrate的处理了,对于crud,django 支持数据路由,我们只需要配置自己的
路由规则就可以了,以下是一个简单的试用
环境准备
这个比较简单,我们使用提供的cli 就可以了
- 项目结构
├── demoapp
│ ├── __init__.py
│ ├── admin.py
│ ├── apps.py
│ ├── migrations
│ │ ├── __init__.py
│ ├── models.py
│ ├── tests.py
│ └── views.py
├── manage.py
└── multisource
├── __init__.py
├── asgi.py
├── mydbrouter.py
├── settings.py
├── urls.py
└── wsgi.py
- 代码说明
models.py
from django.db import models
# Create your models here.
class MyUser(models.Model):
name = models.CharField(max_length=255)
age = models.IntegerField()
admin.py
from django.contrib import admin
# Register your models here.
from .models import MyUser
admin.site.register(MyUser)
- 安装app
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'demoapp'
]
配置多数据源
- 配置datasource
settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
},
'users': {
'NAME': BASE_DIR / 'db2.sqlite3',
'ENGINE': 'django.db.backends.sqlite3',
}
}
- 创建数据路由规则
主要是对于demoapp 的app 直接路由到users,包含了读以及写,同时也创建了以下relation 以及migrate的规则
mydbrouter.py
class MyUserRouter:
route_app_labels = {'demoapp'}
def db_for_read(self, model, **hints):
if model._meta.app_label in self.route_app_labels:
return 'users'
return None
def db_for_write(self, model, **hints):
if model._meta.app_label in self.route_app_labels:
return 'users'
return None
def allow_relation(self, obj1, obj2, **hints):
if (
obj1._meta.app_label in self.route_app_labels or
obj2._meta.app_label in self.route_app_labels
):
return True
return None
def allow_migrate(self, db, app_label, model_name=None, **hints):
if app_label in self.route_app_labels:
return db == 'users'
return None
试用
- 进行migrate操作
python manage.py makemigrations
- admin migrate
python manage.py migrate
- users migrate
python manage.py migrate --database=users
- 启动操作
python manage.py runserver
db 效果
说明
以上是一个简单的操作,主要是学习下django多数据源支持的处理,多看官方文档比较好,官方文档都提供了说明
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
2020-01-03 java 应用使用jfr+sjk 生成应用火焰图
2020-01-03 使用btrace 分析java 应用
2020-01-03 vigil监控以及webhook使用
2019-01-03 masterlab 敏捷项目管理工具
2019-01-03 luarocks 自定义包发布试用
2018-01-03 jest js 测试框架-简单方便人性化
2014-01-03 Nginx 安装成Windows 服务方法