【问题标题】:Confusion over Multiple Database Configuration对多个数据库配置的困惑
【发布时间】:2020-04-12 19:44:00
【问题描述】:

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

当我第一次开始实现这一点时,我预计 Model 类中会有一个 META 来指定其数据库,但似乎并非如此。我看到人们将应用程序映射到数据库的示例,这对于我的场景来说是完美的,但是他们转身写了一个路由。

我不想总是将数据库添加到 Save 调用,因为这很容易出现编程错误。是否有将应用程序映射到数据库或模型到数据库的官方设置?还是总是需要写一个Router来使用多个数据库。

# 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】:

    是的,您需要使用路由器。那是 Django 用于决定应将哪个数据库用于给定操作的机制。能够在代码中指定这一点比简单的映射更强大、更灵活。

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

    【讨论】:

      猜你喜欢
      • 2018-03-12
      • 2019-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多