从一些论坛我知道多个数据库支持在Django的较低级别添加,但更高级别的apis尚未添加。django中的多个数据库支持
任何人都可以请告诉我如何可以在Django中实现多个数据库连接。
有没有人知道什么时候Django会完全/正式支持多个数据库连接。
从一些论坛我知道多个数据库支持在Django的较低级别添加,但更高级别的apis尚未添加。django中的多个数据库支持
任何人都可以请告诉我如何可以在Django中实现多个数据库连接。
有没有人知道什么时候Django会完全/正式支持多个数据库连接。
我在上面看到的最近的讨论是在Proposal: user-friendly API for multi-database support django-developers线程中,它也有一个使用原始消息中的管理器使用多个数据库的方法示例。
我认为你将不得不求助于“原始SQL” ..有点事..
看这里:http://docs.djangoproject.com/en/dev/topics/db/sql/
你需要一个“连接”到其他数据库, 如果你看看周围django/db/__init__.py
第39行(在我的版本。)
connection = backend.DatabaseWrapper(**settings.DATABASE_OPTIONS)
尝试从那里..
PS我没有真正尝试过这个或其他什么,只是试图指出我认为可能解决您的问题的一般方向。
如果你读了几许多(许多)关于这个问题在Django-dev的线程,你会看到什么看起来简单,是不是。如果你选择一个用例,那么它看起来很简单,但是一旦你开始总结任何方式,你就会遇到麻烦。
要使用上述引用的线程作为示例,当您说“多个数据库”时,您在谈论以下哪一项?
,你将需要:
整个数据块一个问题用一个漂亮的ORM就像Django一样,它在一个不错的绘画工作下隐藏了所有这些混乱的细节。要继续做到这一点,但要添加上述任何一项,并不容易(tm)。
Eric Florenzano写了一篇非常好的博客文章,允许您在多个数据库支持:Easy MultipleDatabase Support for Django。
它首先创建一个新的自定义管理器,允许您指定数据库设置。
根据Eric的示例修改全局设置对象并不是一个线程安全的事情。它看起来可能是下层连接API已经改变,以允许传入设置,这将使它线程安全。 – 2009-08-27 20:16:50
如果所有的数据库使用相同的引擎,Eric Florenzano的方法运行良好。如果你有不同的引擎(在我的情况下是Postgres和MSSQL),你会在ORM代码中遇到很多问题(例如使用默认连接的SQL语法的models/sql/where.py)。
如果您需要这个工作,你应该等待其计划在Django 1.2
如果你只是需要多连接亚历克斯Gaynor的MultiDB项目,你可以做这样的事情:
from django.db import load_backend
myBackend = load_backend('postgresql_psycopg2') # or 'mysql', 'sqlite3', 'oracle'
myConnection = myBackend.DatabaseWrapper({
'DATABASE_HOST': '192.168.1.1',
'DATABASE_NAME': 'my_database',
'DATABASE_OPTIONS': {},
'DATABASE_PASSWORD': "",
'DATABASE_PORT': "",
'DATABASE_USER': "my_user",
'TIME_ZONE': "America/New_York",})
# Now we can do all the standard raw sql stuff with myConnection.
myCursor = myConnection.cursor()
myCursor.execute("SELECT COUNT(1) FROM my_table;")
myCursor.fetchone()
这将在Django 1.2中。
从Django的1.2,它将支持多个数据库。请参阅:http://docs.djangoproject.com/en/dev/topics/db/multi-db/ 1.2版目前正处于测试阶段
多个数据库从
我们总是需要一个选择名为默认,其余的名称取决于你。
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'mupltiple_datab_app1',
'USER': 'root',
'PASSWORD': 'admin',
'HOST': "",
'PORT': "",
},
'user1':{
'ENGINE': 'django.db.backends.mysql',
'NAME': 'mupltiple_datab_app2',
'USER': 'root',
'PASSWORD': 'admin',
'HOST': "",
'PORT': "",
},
'user2':{
'ENGINE': 'django.db.backends.mysql',
'NAME': 'mupltiple_datab_app3',
'USER': 'root',
'PASSWORD': 'admin',
'HOST':"" ,
'PORT': "" ,
}
}
为同步到一个特定的数据库
manage.py syncdb --database=user1
我不明白,这确实是一个复杂的工作。 但是,然后django可能只能用于简单的Web应用程序,一旦应用程序变大,它就成为分割数据在多个数据库服务器(分片)中的强制性。开发者如何处理这种情况? – codebreak 2008-11-08 05:31:14
在所有多个数据库问题中,分片可能是特定应用程序中最具特色的,因此最难以产生一个通用解决方案。你知道任何有这个问题的通用解决方案的ORM吗? – 2008-11-08 20:39:44