我在用户组中问这个没有回应,所以我想我会在这里试试。
我正在尝试设置自定义管理器以连接到另一个数据库
与我的默认mysql连接在同一台服务器上。我试过了
按照示例here和here但没有运气。返回时我得到一个空元组
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/
答案 0 :(得分:4)
您可能希望与Alex Gaynor通话,因为他正在添加MultiDB支持,并且可能会在Django 1.2中发布可能的版本。我相信他会很感激那些将要使用MultiDB的人的反馈和意见。在django-developers主列表中有关于它的讨论。他的MultiDB分支甚至可以使用,我不确定。
因为我猜你可能不能等待,如果MultiDB分支不可用,这里有你的选择。
总结一下。我认为将MultiDB攻击到Django可能是错误的方法,除非你准备好以后继续维护你的黑客。因此,我认为另一个ORM或数据库访问将为您提供最干净的路径,因为您不会使用支持的功能,并且在一天结束时,它只是Python。
答案 1 :(得分:1)
我的公司通过密切关注此博客文章http://www.eflorenzano.com/blog/post/easy-multi-database-support-django/
成功使用多个数据库答案 2 :(得分:0)
如果您将所需的一切都移到一个数据库中,这可能不是t the answer your looking for, but it
。