多个数据库配置上的混淆

问题描述 投票:0回答:1

我正在尝试使用多个数据库,其中一个数据库为默认数据库,第二个数据库为:memory数据库。根据文档(如下所示)中的描述,听起来默认路由应该没问题。但是它说对象是“粘”在其原始数据库上的。如何有一个“原始”数据库?

[当我刚开始实现这一点时,我希望Model类中将有一个META来指定其数据库,但是事实并非如此。我看到了一些示例,其中人们将应用程序映射到数据库,这对我的情况而言是完美的,但随后他们转过身来并仍然编写了路由。

我不想总是将数据库添加到Save调用中,因为这很容易发生编程错误。是否存在将应用程序映射到数据库或将模型映射到数据库的官方设置?还是总是需要编写路由器才能使用多个数据库。

# Is DATABASE_APPS_MAPPING just a name that some developer chose to use or is it a
# real Django thing that would do what I want?
DATABASE_APPS_MAPPING = {'app1': 'default', 'app2': 'in_memory'}

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    },
    'in_memory': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': ':memory:',
    }
}

Doc Content

使用多个数据库的最简单方法是设置数据库路由方案。默认的路由方案可确保对象保持对原始数据库的“粘性”(即,从foo数据库中检索到的对象将保存在同一数据库中)。默认路由方案可确保如果未指定数据库,则所有查询都将退回到默认数据库。

django django-models django-orm
1个回答
0
投票

是,您需要使用路由器。这是Django的机制,用于确定应将哪个数据库用于给定的操作。与简单的映射相比,能够在代码中指定此功能更加强大和灵活。

如果可以通过映射满足您的需求,那么您可以自己实现该功能;也许已经有第三方应用程序了。 DATABASE_APPS_MAPPING不是Django设置,这就是为什么有人随后必须编写路由器以使用该值的原因。

© www.soinside.com 2019 - 2024. All rights reserved.