一尘不染

Django多数据库路由

django

我一直在使用手动数据库选择来处理具有两个独立数据库的项目。我已经在设置中定义了数据库。

进一步阅读之后,看来数据库路由实际上是解决问题的方法。但是,在阅读了文档和此处的一些相关文章之后,我比以往更加困惑。

在我的设置中,我有:

DATABASES = {
    'default': {
       .... 
    },
    'my_db2': {
       ....
    }
}

DATABASE_ROUTERS = ['myapp2.models.MyDB2Router',]

我知道我必须像这样定义路由器类(我认为在myapp2.models.py文件中):

class MyDB2Router(object):
"""A router to control all database operations on models in
the myapp2 application"""

def db_for_read(self, model, **hints):
    if model._meta.app_label == 'myapp2':
        return 'my_db2'
    return None

def db_for_write(self, model, **hints):
    if model._meta.app_label == 'myapp2':
        return 'my_db2'
    return None

def allow_relation(self, obj1, obj2, **hints):
    if obj1._meta.app_label == 'myapp2' or obj2._meta.app_label == 'myapp2':
        return True
    return None

def allow_syncdb(self, db, model):

    if db == 'my_db2':
        return model._meta.app_label == 'myapp2'
    elif model._meta.app_label == 'myapp2':
        return False
    return None

那呢 每个模型都需要一个meta.app_label还是自动的?除此之外,我仍然得到一个错误:

django.core.exceptions.ImproperlyConfigured:导入数据库路由器JournalRouter时出错:“无法导入名称连接

谁能帮助我了解正在发生的事情和出了什么问题?任何帮助,不胜感激。


阅读 669

收藏
2020-04-01

共1个答案

一尘不染

我解决了自己的问题。路由器类放入/ myapp2下的名为routers.py的单独文件中。不需要meta.app_label,因为我猜它是自动分配的。

2020-04-01