不同数据库上的 Django 应用程序模型

Posted

技术标签:

【中文标题】不同数据库上的 Django 应用程序模型【英文标题】:Django application models on different databases 【发布时间】:2015-02-26 16:21:15 【问题描述】:

我有两个 django 应用程序,在服务器 A 上调用它们 Main 和在服务器 B 上调用它们 TaskerMain 响应用户请求,做了很多可以快速完成的事情。 另一方面,Tasker 只有少数几个用于日志记录和 celery 任务的模型。

在服务器 A 上,'tasker' 不包含在 INSTALLED_APPS 中,因为我不需要它,而在服务器 B 上,它是。

从django's documentation,我创建了一个路由器并定义了db_for_readdb_for_write

class ModelsRouter(object):
    """
       Logging models are on local,
       but updated models are on another server
    """
    def db_for_read(self, model, **hints):
       if model._meta.app_label == 'tasker':
           return 'tasker'
       return None

    def db_for_write(self, model, **hints):
       if model._meta.app_label == 'tasker':
           return 'tasker'
       return None

在服务器 B 上,DATABASES 设置包含两个键:

default 指向服务器 A tasker 指向本地主机

我遇到的问题是,当我运行manage.py migrate 时,tasker 的模型是在服务器 A 上创建的。 如何在服务器 B 上设置项目以了解以下内容: - main app 的模型在服务器 A 上 - tasker 的模型在服务器 B(也是本地主机)上?

【问题讨论】:

【参考方案1】:

我设法通过以下方式解决了这个问题:

如果模型不是来自应用程序tasker,我将 ModelsRouter 修改为使用 main 数据库配置 在我部署tasker的服务器上,我修改了DATABASES,使default指向localhostmain指向main所在的另一台服务器

在服务器 B 上,我运行了 manage.py migrate tasker,因为该数据库中不需要其他模型。 它现在正在工作:

日志记录在服务器 B 上的表中完成 在另一台服务器上执行更新

我在运行manage.py migrate tasker 时遇到的问题是这样的:

RuntimeError: Error creating new content types. Please make sure contenttypes is migrated before trying to migrate apps individually.

但我会管理它。

【讨论】:

以上是关于不同数据库上的 Django 应用程序模型的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Django 中从用户模型的字段自动填充和显示数据到来自不同应用程序的另一个模型?

在两个不同的 Django 项目之间共享模型

使用 Django 模型嵌入散景[重复]

Django为同一模型创建不同的表

从两个不同的模型在 Django 中建模收藏夹

从独立的python脚本访问postgresql上的django数据库