【发布时间】: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:',
}
}
使用多个数据库的最简单方法是设置数据库路由方案。默认路由方案确保对象保持“粘性”到其原始数据库(即,从 foo 数据库检索的对象将保存在同一数据库中)。默认路由方案确保如果未指定数据库,所有查询都回退到默认数据库。
【问题讨论】:
标签: django django-models django-orm