10

从某个论坛我了解到,在 Django 中在较低级别添加了多数据库支持,但尚未添加更高级别的 api。

谁能告诉我如何在 Django 中实现多个数据库连接。

有没有人知道 Django 何时完全/正式支持多个数据库连接。

4

10 回答 10

9

如果您只需要多个连接,则可以执行以下操作:

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()
于 2009-12-02T21:49:37.590 回答
6

这将在 Django 1.2 中。

请参阅http://docs.djangoproject.com/en/dev/topics/db/multi-db/

于 2010-02-17T00:52:00.120 回答
4

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.

于 2008-11-06T11:35:55.997 回答
3

如果您在 django-dev 中阅读了有关此主题的许多(许多)线程中的一些,您会发现看起来很简单,但实际上并非如此。如果你选择一个用例,那么它看起来很容易,但是一旦你开始以任何方式进行概括,你就会开始遇到麻烦。

以上面引用的线程为例,当您说“多个数据库”时,您指的是以下哪个?

  • 同一引擎下同一台机器上的所有数据库。
  • 同一台机器上的所有数据库,不同的引擎(例如 MySQL + PostgreSQL)
  • 一个主数据库,在不同的机器上具有 N 个只读从属。
  • 跨多个数据库服务器的表分片。

您是否需要:

  • 跨数据库的外键
  • 跨机器和/或引擎的 JOIN
  • 等等等等

像 Django 那样光滑的 ORM 的一个问题是,它把所有这些杂乱的细节隐藏在了漂亮的油漆工作之下。继续这样做,但随后添加任何上述内容,并不容易(tm)。

于 2008-11-07T15:54:37.987 回答
2

Eric Florenzano 写了一篇非常好的博客文章,允许您在以下位置提供一些多数据库支持:Easy MultipleDatabase Support for Django

它首先创建一个允许您指定数据库设置的新自定义管理器。

于 2009-06-15T16:46:56.760 回答
1

有一个用于查询、保存和删除的“使用”指令

https://docs.djangoproject.com/en/dev/topics/db/multi-db/#manually-selecting-a-database

于 2011-12-16T19:33:51.857 回答
1

多个数据库可供选择

我们总是需要一个命名的默认值,其余的名称由您决定。

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
于 2013-01-30T12:49:34.340 回答
0

我认为您将不得不求助于“原始 sql”.. 有点东西..
看这里:http ://docs.djangoproject.com/en/dev/topics/db/sql/

django/db/__init__.py如果您查看第 39 行左右(在我的版本中 ..),您需要与其他数据库的“连接”

connection = backend.DatabaseWrapper(**settings.DATABASE_OPTIONS)

尝试从那里拿走它..
PS我还没有真正尝试过这个或任何东西..只是试图指出我认为可以解决您问题的大方向。

于 2008-11-07T04:08:19.143 回答
0

从 Django 1.2 开始,它将支持多个数据库。请参阅:http ://docs.djangoproject.com/en/dev/topics/db/multi-db/ 版本 1.2 现在处于测试阶段

于 2010-04-06T10:00:48.647 回答
0

如果您的所有数据库都使用相同的引擎,那么 Eric Florenzano 的方法效果很好。如果您有不同的引擎(在我的例子中是 Postgres 和 MSSQL),您将在 ORM 代码深处遇到许多问题(例如使用默认连接的 SQL 语法的模型/sql/where.py)。

如果你需要这个工作,你应该等待 Alex Gaynor 为Django 1.2计划的 MultiDB 项目

于 2009-08-17T12:37:13.890 回答