在Mark的优秀回答的基础上,以下是如何根据模型属性将模型读写操作和迁移路由到不同的数据库
class SomeModel(models.Model):
class params:
db = 'default'
class SomeOtherDbModel(models.Model):
class params:
db = 'otherdb'
...
import app.models
allmodels = dict([(name.lower(), cls) for name, cls in app.models.__dict__.items() if isinstance(cls, type)])
...
class MyDBRouter(object):
def db_for_read(self, model, **hints):
""" reading model based on params """
return getattr(model.params, 'db')
def db_for_write(self, model, **hints):
""" writing model based on params """
return getattr(model.params, 'db')
def allow_migrate(self, db, app_label, model_name = None, **hints):
""" migrate to appropriate database per model """
model = allmodels.get(model_name)
return(model.params.db == db)
DATABASE_ROUTERS = ('app.dbrouters.MyDBRouter',)
...
DATABASES = {
...
'otherdb': {
....
}
}
查看文档链接: https://docs.djangoproject.com/en/3.0/topics/db/multi-db/#database-routers
model_name
参数在运行时作为 model.__name__
的小写传递,因此我们需要将该属性转换为小写来构建查找字典。
然后应该运行迁移:
python3 manage.py migrate app --database default
python3 manage.py migrate app --database otherdb
using
怎么样? - alexzander