首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Django -如何为模型指定数据库?

Django -如何为模型指定数据库?
EN

Stack Overflow用户
提问于 2010-08-19 14:06:51
回答 5查看 30.8K关注 0票数 45

有没有办法指定一个模型(甚至是应用程序)应该只使用一个特定的数据库?

我正在使用一个我不想更改的遗留数据库。我有两个数据库-‘默认’是一个sqlite的,可用于管理等,和遗留的一个。我使用inspectdb为遗留数据库(部分)创建了一个模型,它有managed = False。但是,有没有办法在模型本身中指定它只适用于特定的数据库?

我看到您可以在一些查询集等中使用specify using=databasename,但这对Databrowse (也可能是通用视图?)这样的东西并不好。Databrowse的缺点可能是你不能指定数据库,但它似乎是指定它是模型的正确地方……

然后我想,也许答案是编写一个自定义的model manager,它只引用我的遗留数据库-但文档中没有提到任何类似的内容。

对于如何使用多个数据库,我是否有一个与Django世界不同的心理模型?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-08-19 15:56:35

据我所知,你不能直接用模型指定数据库,因为这会阻止应用程序的重用,但从我在文档中看到的情况来看:

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

票数 16
EN

Stack Overflow用户

发布于 2017-12-20 06:20:46

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

代码语言:javascript
复制
# 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': {
        ....
    }
}
票数 58
EN

Stack Overflow用户

发布于 2020-01-13 23:20:04

简单的解决方案是将管理器设置为始终使用模型的特定数据库。看看姜戈的using吧。

示例:

代码语言:javascript
复制
class User(models.Model):
    birth_date = models.DateField()

    class Meta:
        managed = False
        db_table = 'myotherapp_user'

User.objects = User.objects.using('myotherdb')

然后,您可以使用User.objects,它将始终使用'myotherdb'数据库,而不是'default'

请注意,来自不同数据库的模型之间的关系将不起作用,但这是Django的一个问题,因为它不支持开箱即用。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3519143

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档