gpt4 book ai didi

django - 带有自定义管理器的 Django 1.0.2 中的多个数据库

转载 作者:行者123 更新时间:2023-12-04 15:16:44 25 4
gpt4 key购买 nike

我在用户组中问了这个没有回应所以我想我会在这里尝试。
我正在尝试设置自定义管理器以连接到另一个数据库
与我的默认 mysql 连接在同一台服务器上。我试过了
遵循示例 herehere但没有运气。返回时我得到一个空元组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 主干中,并将成为 1.2 版本的一部分
http://docs.djangoproject.com/en/dev/topics/db/multi-db/

最佳答案

您可能想联系 Alex Gaynor因为他正在添加 MultiDB 支持,并且它可能会在 Django 1.2 中发布.我相信他会感谢那些将要使用 MultiDB 的人的反馈和意见。在 django-developers 中有关于它的讨论主要名单。他的 MultiDB 分支甚至可能可用,我不确定。

因为我猜你可能等不及了,如果 MultiDB 分支不可用,这里是你的选择。

  • 关注 Eric Flows method ,请记住它不受支持并且新发布的 Django 可能会破坏它。此外,一些评论表明其already been broken .这将是 hacky。
  • 您的另一种选择是对您的一个数据库使用完全不同的数据库访问方法。也许 SQLAlchemy一个然后是 Django ORM。我的猜测是,一个可能更以 Django 为中心,另一个是遗留数据库。

  • 总结一下。我认为将 MultiDB 入侵 Django 可能是错误的方法,除非您准备好在以后跟上维护您的 hack 的步伐。因此,我认为另一个 ORM 或数据库访问将为您提供最干净的路线,因为那样您就不会使用受支持的功能,并且在一天结束时,它只是 Python。

    关于django - 带有自定义管理器的 Django 1.0.2 中的多个数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/779055/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com