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多數據源支持的處理,多看官方文檔比較好,官方文檔都提供了說明
