【发布时间】:2010-09-21 01:14:22
【问题描述】:
从某个论坛我了解到,在 Django 中,底层添加了多数据库支持,但尚未添加更高级别的 api。
谁能告诉我如何在 Django 中实现多个数据库连接。
有没有人知道 Django 何时会完全/正式支持多个数据库连接。
【问题讨论】:
标签: python django database-connection
从某个论坛我了解到,在 Django 中,底层添加了多数据库支持,但尚未添加更高级别的 api。
谁能告诉我如何在 Django 中实现多个数据库连接。
有没有人知道 Django 何时会完全/正式支持多个数据库连接。
【问题讨论】:
标签: python django database-connection
多个数据库可供选择
我们总是需要一个命名的默认值,其余的名称由您决定。
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 1.2 开始,它将支持多个数据库。见:http://docs.djangoproject.com/en/dev/topics/db/multi-db/ 1.2 版现在处于测试阶段
【讨论】:
这将在 Django 1.2 中。
【讨论】:
如果你只是需要多个连接,你可以这样做:
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()
【讨论】:
如果您的所有数据库都使用相同的引擎,那么 Eric Florenzano 的方法会很有效。如果你有不同的引擎(在我的例子中是 Postgres 和 MSSQL),你会在 ORM 代码中遇到很多问题(例如使用默认连接的 SQL 语法的 models/sql/where.py)。
如果你需要这个工作,你应该等待 Alex Gaynor 为 Django 1.2 计划的 MultiDB 项目
【讨论】:
Eric Florenzano 写了一篇非常好的博文,让您可以在以下位置获得多数据库支持:Easy MultipleDatabase Support for Django。
首先创建一个允许您指定数据库设置的新自定义管理器。
【讨论】:
如果您在 django-dev 中阅读了有关此主题的许多 (许多) 线程,您会发现 看起来 简单明了,但实际上并非如此。如果您选择一个用例,那么看起来很容易,但是一旦您开始以任何方式进行概括,您就会遇到麻烦。
以上面引用的线程为例,当你说“多个数据库”时,你指的是以下哪个?
你需要:
像 Django 这样的光滑 ORM 的一个问题是,它在漂亮的油漆工作下隐藏了所有这些杂乱的细节。继续这样做,但随后添加任何上述内容,并不容易(tm)。
【讨论】:
我认为您将不得不求助于“原始 sql”.. 有点东西..
看这里:http://docs.djangoproject.com/en/dev/topics/db/sql/
您需要与其他数据库的“连接”,
如果您在第 39 行附近查看django/db/__init__.py(在我的版本中..)
connection = backend.DatabaseWrapper(**settings.DATABASE_OPTIONS)
尝试从那里拿走它..
附言我还没有真正尝试过这个或任何东西......只是试图指出我认为可能会解决你的问题的大致方向。
【讨论】:
我在Proposal: user-friendly API for multi-database support django-developers 线程中看到的最新讨论,在原始消息中还提供了使用管理器使用多个数据库的一种方法的示例。
【讨论】: