代码之家  ›  专栏  ›  技术社区  ›  pfctdayelise

如何为模型指定数据库?

  •  21
  • pfctdayelise  · 技术社区  · 15 年前

    有没有一种方法可以指定一个模型(或应用程序,甚至)应该只使用一个特定的数据库?

    我正在使用一个我不想更改的旧数据库。我有两个数据库-“默认”是一个可用于管理等的sqlite数据库,以及旧数据库。我使用inspectdb为遗留数据库(部分)创建了一个模型,它有 managed = False . 但是,是否有一种方法可以在模型本身中指定它只应用于特定的数据库?

    我知道你可以 specify using=databasename 在某些查询集等中,但这对诸如 Databrowse (也可能是通用视图?)。不能指定数据库可能是数据浏览的一个缺点,但它似乎是指定模型的正确位置…

    然后我想也许答案是写一个习惯 model manager 这只涉及我的旧数据库——但是文档没有提到类似的内容。

    我是否只是有一个不同的心理模型来说明多个数据库在django世界中的使用方式?

    2 回复  |  直到 8 年前
        1
  •  12
  •   chuseuiti PearsonArtPhoto    10 年前

    据我所知,您不能用模型直接指定数据库,因为它会阻止应用程序的可重用性,但从我在文档中看到的内容来看:

    https://docs.djangoproject.com/en/1.8/topics/db/multi-db/

        2
  •  12
  •   Mark Chackerian    8 年前

    不能为模型指定数据库,但可以在自定义DB路由器类中定义它。

    # app/models.py
    class SomeModel(models.Model):
        ...
    
    # app/dbrouters.py
    from app.models import SomeModel
    ...
    class MyDBRouter(object):
    
        def db_for_read(self, model, **hints):
            """ reading SomeModel from otherdb """
            if model == SomeModel:
                return 'otherdb'
            return None
    
        def db_for_write(self, model, **hints):
            """ writing SomeModel to otherdb """
            if model == SomeModel:
                return 'otherdb'
            return None
    
    
    # app/settings.py
    DATABASE_ROUTERS = ('app.dbrouters.MyDBRouter',)
    ...
    DATABASES = {
        ...
        'otherdb': {
            ....
        }
    }