Jus*_*ade 6 django django-models
我在用户组中问这个没有回复,所以我想我会在这里试试.我正在尝试设置一个自定义管理器连接到与我的默认mysql连接相同的服务器上的另一个数据库.我试过这里和这里的例子,但没有运气.回来时我得到一个空元组
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
Run Code Online (Sandbox Code Playgroud)
这是我在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
Run Code Online (Sandbox Code Playgroud)
但如果我跑,MyCustomModel.objects.all()我得到一个空列表.
我对这些东西很新,所以我不确定这是否适用于1.0.2,我将查看Manager代码,看看我是否能解决它,但我只是想知道我是否在这里做错了.
更新:现在在Django主干中,将成为1.2版本的一部分 http://docs.djangoproject.com/en/dev/topics/db/multi-db/
小智 4
您可能想与Alex Gaynor交谈,因为他正在添加 MultiDB 支持,并且可能会在Django 1.2中发布。我确信他会感谢那些将要使用 MultiDB 的人的反馈和意见。在django-developers mainling 列表中有关于它的讨论。他的 MultiDB 分支甚至可能可用,我不确定。
因为我猜您可能已经等不及了,如果 MultiDB 分支不可用,那么以下是您的选择。
总结一下。我认为将 MultiDB 侵入 Django 可能是错误的方法,除非您准备好稍后维护您的 hack。因此,我认为另一个 ORM 或数据库访问将为您提供最干净的路线,因为这样您就不会使用受支持的功能,最终,它只是 Python。
| 归档时间: |
|
| 查看次数: |
1169 次 |
| 最近记录: |