Django 1.0.2 中的多个数据库与自定义管理器

2023-12-23

我在用户组中询问了这个问题,但没有得到回应,所以我想我会在这里尝试一下。 我正在尝试设置自定义管理器来连接到另一个数据库 在与我的默认 mysql 连接相同的服务器上。我努力了 遵循示例here http://groups.google.com/group/django-developers/browse_thread/thread/5d8c73eb483029af/19b19ed79bbbfa0d and here http://www.djangrrl.com/view/multiple-database-connection-a-simple-use-case/但没有运气。返回时我得到一个空元组MyCustomModel.objects.all().

这是我在 manager.py 中的内容

from django.db import models 
from django.db.backends.mysql.base import DatabaseWrapper 
from django.conf import settings 
class CustomManager(models.Manager): 
    """ 
    This Manager lets you set the DATABASE_NAME on a per-model basis. 
    """ 
    def __init__(self, database_name, *args, **kwargs): 
        models.Manager.__init__(self, *args, **kwargs) 
        self.database_name = database_name 
    def get_query_set(self): 
        qs = models.Manager.get_query_set(self) 
        qs.query.connection = self.get_db_wrapper() 
        return qs 
    def get_db_wrapper(self): 
        # Monkeypatch the settings file. This is not thread-safe! 
        old_db_name = settings.DATABASE_NAME 
        settings.DATABASE_NAME = self.database_name 
        wrapper = DatabaseWrapper() 
        wrapper._cursor(settings) 
        settings.DATABASE_NAME = old_db_name 
        return wrapper 

这是我在 models.py 中的内容:

from django.db import models 
from myproject.myapp.manager import CustomManager 
class MyCustomModel(models.Model): 
    field1  = models.CharField(max_length=765) 
    attribute = models.CharField(max_length=765) 
    objects = CustomManager('custom_database_name') 
    class Meta: 
        abstract = True 

但如果我跑MyCustomModel.objects.all()我得到一个空列表。

我对这个东西很陌生,所以我不确定这是否适用于 1.0.2,我将查看 Manager 代码,看看我是否能弄清楚 它出来了,但我只是想知道我是否在这里做错了什么。

更新: 现在它位于 Django trunk 中,并将成为 1.2 版本的一部分http://docs.djangoproject.com/en/dev/topics/db/multi-db/ http://docs.djangoproject.com/en/dev/topics/db/multi-db/


您可能想与亚历克斯·盖纳 http://twitter.com/alex_gaynor因为他正在添加 MultiDB 支持,并且可能会在姜戈1.2 http://code.djangoproject.com/wiki/Version1.2Features。我确信他会感谢那些将要使用 MultiDB 的人的反馈和意见。网上有关于它的讨论Django 开发人员 http://groups.google.com/group/django-developers主要清单。他的 MultiDB 分支甚至可能可用,我不确定。

因为我猜您可能已经等不及了,如果 MultiDB 分支不可用,那么以下是您的选择。

  • Follow 埃里克·弗洛斯法 http://www.eflorenzano.com/blog/post/easy-multi-database-support-django/,请记住它不受支持,新发布的 Django 可能会破坏它。另外,一些评论表明它已经被打破了 http://www.eflorenzano.com/blog/post/easy-multi-database-support-django/#dsq-time-13323576。这会很麻烦。
  • 您的另一种选择是对您的数据库之一使用完全不同的数据库访问方法。也许SQL炼金术 http://www.sqlalchemy.org/首先是 Django ORM。我猜测一个可能更以 Django 为中心,另一个是遗留数据库。

总结一下。我认为将 MultiDB 侵入 Django 可能是错误的方法,除非您准备好稍后维护您的 hack。因此,我认为另一个 ORM 或数据库访问将为您提供最干净的路线,因为这样您就不会使用受支持的功能,最终,它只是 Python。

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

Django 1.0.2 中的多个数据库与自定义管理器 的相关文章

随机推荐

  • AngularJS 中使用 q 的多个链式延迟函数停止返回数据

    我试图将多个延迟函数调用链接在一起 以便下一个调用可以获得前一个 deferred resolve 的结果 当我将两个以上的调用链接在一起时 数据将停止返回 这是角度控制器内的基本代码 scope runAsync function var
  • 不同应用程序的相同密钥库[重复]

    这个问题在这里已经有答案了 我对所有已发布的应用程序始终使用相同的密钥库和相同的别名密钥 这是一个正确的选择 或者我应该为每个发布的应用程序使用不同的别名吗 我还没有找到有关正确使用密钥库的真正明确的信息 密钥库文件或应用程序的签名表示某些
  • Helm 3.0.2 试运行 + 稳定/prometheus-operator?这应该有效吗?

    使用 Helm v3 0 2 新的 Kubernetes v1 14 9 集群 仅供参考 我已经添加了稳定的存储库 helm repo add stable https kubernetes charts storage googleapi
  • JavaScript 将 HTML 表格导出到 Excel

    我需要 JavaScript 将 HTML 表格导出到 Excel 我已经尝试过这个脚本 但它只导出一张表
  • Laravel Eloquent ORM 中的自然 ORDER

    我如何在 Eloquent ORM 中获得 自然顺序 在表中我有 文本 列 字符串 正常顺序 Model orderBy text value 1 value 12 value 23 value 3 value 8 我需要这个 value
  • 运行 django 本地服务器时出错:`__init__() 得到意外的关键字参数 'tcp_nodelay'`

    一切都很好并且始终运行没有问题 现在 当我从浏览器加载应用程序时出现错误 似乎与代码无关 因为我跳到了最旧的分支上 并且得到了相同的错误 这是我的 python 和 django 版本 python version Python 3 6 0
  • 进行带有超时的 EJB 调用

    我有一个EJBA调用 EJBB UI 等待响应的时间不应超过 30 秒 如果某些数据丢失 它应该返回部分响应 如何在 EJB 上定义超时 30 秒的时间限制 B 我可以定义EJBB as Asynchronous返回Future 然后做Fu
  • 如何将嵌入/嵌套 FormGroup 转换为 FormData

    这是我的表格组 this shopGroup this fb group user name Validators compose Validators required Validators maxLength 60 url name d
  • C# - 文件关联对注册表项“HKEY_CLASSES_ROOT\”的访问被拒绝

    我目前有一个使用注册表设置文件关联的程序 注意 它是 NET 2 0 所以我必须通过注册表方法 问题是 由于它正在尝试写入 HKCR 因此可能会遇到管理问题 在其他计算机上 是否有更通用的方法来设置文件关联 对于 NET 2 0 例如使用
  • 无法将本地更改推送到现有远程分支

    有一个名为 my remote 的远程分支 我之前已毫无问题地推送到该分支 截至今天 我无法推动并且出现不同的错误 我得到的第一个错误是 hint Updates were rejected because a pushed branch
  • 无法文本对齐:CSS 居中

    我似乎无法将 主页 按钮置于中央 主文本位于左侧而不是中心 我的 htm 和 css 链接如下 html h1 Bully Free Zone h1 h2 Online harassment has an off line impact h
  • 打字稿 |每次调用函数时都会调用一个函数

    我正在尝试编写 Typescript API 服务 对于该服务 我需要一种方法来检查该方法是否存在 例如函数get叫做 我意识到我可以这样做 get endpoint string this handleRequest post endpo
  • 调整 UIWebView 文本大小

    我试图让用户调整给定网页的文本大小 我在 Xcode 6 中使用 Swift HTML 文件 h1 My First Heading h1 My first paragraph 这是我调用的快速函数来尝试更改大小 func changeWe
  • 如何使用Monitor(DDMS)工具调试应用程序

    这些天我正在将开发环境从 Eclipse 切换到 Android Studio 我真的很喜欢它的自动完成功能以及这个 IDE 提供的许多其他功能 但是 我在调试时遇到了一些问题 我希望使用这个IDE提供的Monitor工具 自带的DDMS和
  • 在单元测试中抑制 Vue 警告

    我试图按照此处列出的配置在测试中抑制警告 https vue test utils vuejs org api config html silent https vue test utils vuejs org api config htm
  • JavaFX 制作相同动画的副本

    我正在尝试扩展之前的作业 它是画一个风扇 并有一个滑块来控制播放速度 以及播放 暂停和反转风扇的按钮 这是我的该作业的代码 public class FanWithControls extends Application Override
  • 500 HTTP POST 请求的内部错误

    我正在使用下面的代码使用 HTTP POST 上传文件 但我从服务器收到 500 内部服务器错误响应 您能看一下并让我知道哪个代码部分是罪魁祸首 丢失的吗 HTTPS 连接没有错误 我认为标头存在问题 因此服务器不接受此请求 Check s
  • PHP/MYSQL AJAX 聊天

    寻找一个开源的php mysql ajax聊天室 不是1对1的私人聊天 你们会推荐什么 我将需要创建数百个聊天室实例 例如 每个用户组都有自己的专属聊天室 看看 phpFreeChat 这是一个易于实施的活跃项目 http www phpf
  • 如何在OpenAI中创建新的健身房环境?

    我的任务是制作一个 AI 代理 该代理将学习使用 ML 玩视频游戏 我想使用 OpenAI Gym 创建一个新环境 因为我不想使用现有环境 如何创建新的自定义环境 另外 我是否可以通过其他方式开始开发 AI 代理来玩特定的视频游戏 而无需
  • Django 1.0.2 中的多个数据库与自定义管理器

    我在用户组中询问了这个问题 但没有得到回应 所以我想我会在这里尝试一下 我正在尝试设置自定义管理器来连接到另一个数据库 在与我的默认 mysql 连接相同的服务器上 我努力了 遵循示例here http groups google com