从某个论坛我了解到,在 Django 中在较低级别添加了多数据库支持,但尚未添加更高级别的 api。
谁能告诉我如何在 Django 中实现多个数据库连接。
有没有人知道 Django 何时完全/正式支持多个数据库连接。
从某个论坛我了解到,在 Django 中在较低级别添加了多数据库支持,但尚未添加更高级别的 api。
谁能告诉我如何在 Django 中实现多个数据库连接。
有没有人知道 Django 何时完全/正式支持多个数据库连接。
如果您只需要多个连接,则可以执行以下操作:
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 中。
The most recent discussion I've seen on it was in the Proposal: user-friendly API for multi-database support django-developers thread, which also has an example of one way to use multiple databases using Managers in the original message.
如果您在 django-dev 中阅读了有关此主题的许多(许多)线程中的一些,您会发现看起来很简单,但实际上并非如此。如果你选择一个用例,那么它看起来很容易,但是一旦你开始以任何方式进行概括,你就会开始遇到麻烦。
以上面引用的线程为例,当您说“多个数据库”时,您指的是以下哪个?
您是否需要:
像 Django 那样光滑的 ORM 的一个问题是,它把所有这些杂乱的细节隐藏在了漂亮的油漆工作之下。继续这样做,但随后添加任何上述内容,并不容易(tm)。
Eric Florenzano 写了一篇非常好的博客文章,允许您在以下位置提供一些多数据库支持:Easy MultipleDatabase Support for Django。
它首先创建一个允许您指定数据库设置的新自定义管理器。
有一个用于查询、保存和删除的“使用”指令
https://docs.djangoproject.com/en/dev/topics/db/multi-db/#manually-selecting-a-database
多个数据库可供选择
我们总是需要一个命名的默认值,其余的名称由您决定。
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
我认为您将不得不求助于“原始 sql”.. 有点东西..
看这里:http ://docs.djangoproject.com/en/dev/topics/db/sql/
django/db/__init__.py
如果您查看第 39 行左右(在我的版本中 ..),您需要与其他数据库的“连接”
connection = backend.DatabaseWrapper(**settings.DATABASE_OPTIONS)
尝试从那里拿走它..
PS我还没有真正尝试过这个或任何东西..只是试图指出我认为可以解决您问题的大方向。
从 Django 1.2 开始,它将支持多个数据库。请参阅:http ://docs.djangoproject.com/en/dev/topics/db/multi-db/ 版本 1.2 现在处于测试阶段
如果您的所有数据库都使用相同的引擎,那么 Eric Florenzano 的方法效果很好。如果您有不同的引擎(在我的例子中是 Postgres 和 MSSQL),您将在 ORM 代码深处遇到许多问题(例如使用默认连接的 SQL 语法的模型/sql/where.py)。
如果你需要这个工作,你应该等待 Alex Gaynor 为Django 1.2计划的 MultiDB 项目