Django 中不同应用程序的不同数据库[关闭]

2024-03-16

我的 Django 站点中有多个应用程序:mainsite, blog and 教程.

我可以在不同的 Django 应用程序中使用不同的数据库(例如 PostgreSQL、MySQL)吗?


以下是您需要执行的操作才能开始。

  1. 更新您要使用的数据库的设置。

settings.py

DATABASES = {
'default': {
    'ENGINE': 'django.db.backends.sqlite3',
    'NAME': '/var/db/projectdb'
}
'db_app1': {
    'ENGINE': 'django.db.backends.sqlite3',
    'NAME': '/var/db/app1db'
}
'db_app2': {
    'ENGINE': 'django.db.backends.sqlite3',
    'NAME': '/var/db/app2db'
}
  1. 对于每个数据库,实现一个数据库路由器,以适当地路由查询。根据您的情况,在每个应用程序中实施。请注意,这或多或少取自 django 文档。

dbRouter.py(放置在“app1”文件夹中):

# DB router for app1
class App1DBRouter(object):
        """
    A router to control db operations
    """
    route_app_labels = {'app1'}
    db_name = 'db_app1'

    def db_for_read(self, model, **hints):
        """
        Attempts to read auth and contenttypes models go to self.db_name.
        """
        if model._meta.app_label in self.route_app_labels:
            return self.db_name
        return None

    def db_for_write(self, model, **hints):
        """
        Attempts to write auth and contenttypes models go to self.db_name.
        """
        if model._meta.app_label in self.route_app_labels:
            return self.db_name
        return None

    def allow_relation(self, obj1, obj2, **hints):
        """
        Allow relations if a model in the auth or contenttypes apps is
        involved.
        """
        if (
            obj1._meta.app_label in self.route_app_labels or
            obj2._meta.app_label in self.route_app_labels
        ):
           return True
        return None

    def allow_migrate(self, db, app_label, model_name=None, **hints):
        """
        Make sure the auth and contenttypes apps only appear in the
        self.db_name database.
        """
        if app_label in self.route_app_labels:
            return db == self.db_name
        return None
  1. Update DATABASE_ROUTERS在设置.py

settings.py

DATABASE_ROUTERS = ['app1.dbRouter.App1DBRouter', 'app2.dbRouter.App2DBRouter']
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django 中不同应用程序的不同数据库[关闭] 的相关文章

随机推荐

  • 如果 proxy_pass 响应中存在 etag,则禁用 gzip

    我是 Nginx 新手 如果 proxy pass 返回 ETag 标头 是否有办法禁用 gzip I E gzip on location foo bar proxy pass http server 123 if upstream ht
  • 通过 try() 之类的方法使 R 命令超时

    我正在并行运行大量迭代 某些迭代比其他迭代花费的时间要长得多 例如 100 倍 我想将这些超时 但我不想深入研究函数 称为 fun c 背后的 C 代码来完成繁重的工作 我希望有类似于 try 的东西 但有一个 time out 选项 然后
  • 最新的 OpenGL 教程或 C++ 书籍 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Websphere 中的 NoClassDefFoundError — 存在 JAR

    我有一个简单的 Spring MVC 应用程序 它从 LDAP 服务器查找一些用户详细信息 并使用 JSP 打印出一个简单的 HTML 页面 该应用程序在 Tomcat 6 上运行良好 它使用 Spring LDAP 1 3 1 和 LDA
  • 将变量传递到 CURLOPT_POSTFIELDS C++

    我正在尝试将变量传递到CURLOPT POSTFIELDS 我当前的代码 size t curl write void ptr size t size size t nmemb void stream std string cmd stat
  • 有没有办法询问 iOS 视图的哪个子视图具有第一响应者状态? [复制]

    这个问题在这里已经有答案了 在 Mac OS X 中 您可以这样找到第一响应者 self window firstResponder 在iOS中有什么方法可以做到这一点吗 或者您是否需要枚举子控件并发送isFirstResponder给每一
  • 如何使用 eclipse Nsight 仅使用一个 GPU 调试 CUDA

    我收到错误 所有 cuda 设备均用于显示 在调试时无法使用 使用Ubuntu 有没有什么方法可以使用 Nsight eclipse 仅使用一个 GPU 进行调试 我见过类似的解决方案 sudo 服务 lightdm 停止 杀死 X 但这也
  • 此版本的ChromeDriver仅支持Chrome版本93

    我有一个 Angular 项目 它使用 puppeteer 运行 Karma 偶尔会出现以下错误 11 13 43 E launcher session not created This version of ChromeDriver on
  • 如何简化三次贝塞尔曲线?

    我有一条三次贝塞尔曲线 由许多段组成 左图 它有一些粗糙的曲率 我需要让它像右图一样平滑 这个问题有点像 降噪 我该如何实现呢 有类似的线程here https stackoverflow com questions 3497694 sim
  • 在 C# 中打印到 LPT1

    如何在 C 中使用文件 LPT1 直接打印到点阵打印机 我用 fopen 在 C 上做到了这一点 但我不知道如何在 c 中做到这一点 非常感谢 在 Windows 中将打印机设置为 通用 仅文本 然后打印到它 这是我用来打印到具有自己的编码
  • UIPickerView iOS7.1 中未定义的键 NSException

    我在 iOS 7 1 模拟器中遇到了 7 0 中未出现的异常 它似乎是在核心的某个地方处理的 因为它只触发异常引发断点 它不会登录到控制台或崩溃 在 UIPickerView 中滚动选项时会发生这种情况 没有可用的有意义的回溯 直接从 UI
  • 如何设置自定义编辑文本中的最小文本大小?

    我正在使用这个自定义 EditText 它会自动调整 EditText 内的文本大小 它工作得很好 但是 文本在换行之前变得太小了 如何设置最小文本大小 这样只有当文本大小达到 12sp 时才换行 public class FontFitT
  • Guava CacheBuilder:暗示实体删除的附加条件

    I want 尝试使用静态类是外部条件 方法
  • 使用 gradle 构建 android 应用程序时 Lint 失败

    我用 android studio 创建了一个应用程序 但每次我尝试使用命令gradle build构建应用程序时 它显示 lint failed 当我检查 gradle build 的调试信息时 它说 21 10 26 215 DEBUG
  • Lua:字符串中的换行符

    我一直在开发一个格式化程序 它将接受一个长字符串并将其格式化为一系列在特定字符限制内的单词处断开的行 例如 他吃面包每 8 个字符断开一次 将返回类似以下内容的内容 He eats the bread 这是因为 He eats 包含 7 个
  • 如何使用 VBA 在众多文本 .log 文件之一中查找特定字符串?

    这是我迄今为止查找文件夹中所有日志文件的代码 但我需要能够在每个文件中找到特定的字符串 如果在一个文件中找到它 则停止查找并退出循环并报告它所在的文件名 打开文件和搜索文件的方法似乎有很多 我不知道哪种方法最好 而且我通常不使用 VBA 但
  • 正向lookbehind后跟逗号分隔列表

    我正在寻找是否有一种方法可以在积极的向后查找之后为每个逗号分隔的列表获取匹配组 例如 summertime swimming running tanning 正则表达式 到目前为止 lt summertime s Returns swimm
  • libVLCSharp 无法创建 MediaList

    我正在玩 libVLCSharp 发现了一个有线行为 实际上 我创建媒体并使用 MediaPlayer 播放它没有任何问题 但是 当我尝试从 MediaList 创建媒体时 它会中断并显示以下消息 无法在本机端执行实例化 确保你 在您的系统
  • WIF 中的主动和被动联合

    我试图了解 WIF 中主动联合和被动联合之间的区别 如果依赖方 RP 是 WCF 服务而不是 ASP NET 应用程序 则似乎可以使用主动联合 如果 RP 是 ASP NET 应用程序 则可以使用被动联合 这准确吗 因此 在 ASP NET
  • Django 中不同应用程序的不同数据库[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我的 Django 站点中有多个应用