從一些論壇我知道多個數據庫支持在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