Django Model Database Routing 是 Django 中一种高级工具,可以让你根据基于模型的 DB 路由将一个模型中的数据存储到不同的数据库中。这种路由可以根据需要配置,以确保业务数据存储在合适的数据库中。接下来,我们将介绍如何使用 Django Model Database Routing。
1.创建数据库连接
打开 settings.py 文件,在 DATABASES 配置中添加第二个数据库:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'default_db',
'USER': 'username',
'PASSWORD': 'password',
'HOST': 'localhost',
'PORT': '5432',
},
'second_db': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'second_db',
'USER': 'username',
'PASSWORD': 'password',
'HOST': 'localhost',
'PORT': '5432',
},
}
2.创建模型类
from django.db import models
class User(models.Model):
username = models.CharField(max_length=20)
email = models.EmailField()
password = models.CharField(max_length=20)
objects = models.Manager()
def __str__(self):
return self.username
3.创建路由类
class UserRouter:
"""A router to control all database operations on models in the
auth application"""
def db_for_read(self, model, **hints):
"""Point all operations on auth models to 'auth_db'"""
if model._meta.app_label == 'auth':
return 'auth_db'
return None
def db_for_write(self, model, **hints):
"""Point all operations on auth models to 'auth_db'"""
if model._meta.app_label == 'auth':
return 'auth_db'
return None
def allow_migrate(self, db, app_label, model_name=None, **hints):
"""Make sure the auth app only appears in the 'auth_db'
database."""
if app_label == 'auth':
return db == 'auth_db'
return None
4.在 settings.py 中配置路由
DATABASE_ROUTERS = ['path.to.UserRouter']
5.使用路由进行数据写入
from django.db import router
from myapp.models import User
user = User(username="pidancode", email="pidancode@pidancode.com", password="mypassword")
db = router.db_for_write(User)
user.save(using=db)
6.使用路由进行读操作
from django.db import router
from myapp.models import User
db = router.db_for_read(User)
users = User.objects.using(db).all()
以上就是 Django Model Database Routing 的配置和使用方法,通过定义路由类,我们可以将不同模型数据存储在不同的数据库,并指定使用哪个数据库进行操作。