日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
如何正確匹配多個(gè)數(shù)據(jù)庫(kù)? (怎么匹配出多個(gè)數(shù)據(jù)庫(kù))

在當(dāng)今互聯(lián)網(wǎng)時(shí)代,數(shù)據(jù)庫(kù)已經(jīng)逐漸成為了企業(yè)和組織進(jìn)行信息管理的不可或缺的工具。但是,在企業(yè)和組織規(guī)模逐漸擴(kuò)大的情況下,數(shù)據(jù)量也越來(lái)越龐大,單個(gè)數(shù)據(jù)庫(kù)已經(jīng)無(wú)法滿足需求。因此,多個(gè)數(shù)據(jù)庫(kù)的使用已經(jīng)成為了常態(tài)。但是,在使用多個(gè)數(shù)據(jù)庫(kù)的過(guò)程中,如何正確地進(jìn)行匹配,才能夠更好地實(shí)現(xiàn)數(shù)據(jù)的管理與利用,則成了一個(gè)十分重要的問(wèn)題。

成都創(chuàng)新互聯(lián)公司主要從事成都網(wǎng)站建設(shè)、做網(wǎng)站、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)大新,十多年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專(zhuān)業(yè),歡迎來(lái)電咨詢建站服務(wù):18982081108

要考慮多個(gè)數(shù)據(jù)庫(kù)的類(lèi)型以及功能。在實(shí)踐中,使用的數(shù)據(jù)庫(kù)可以分為結(jié)構(gòu)化數(shù)據(jù)庫(kù)、非結(jié)構(gòu)化數(shù)據(jù)庫(kù)以及用于搜索的數(shù)據(jù)庫(kù)等多種類(lèi)型。因此,在使用多個(gè)數(shù)據(jù)庫(kù)的時(shí)候,必須要根據(jù)需要進(jìn)行選擇和精細(xì)的匹配。更好的辦法是根據(jù)數(shù)據(jù)類(lèi)型和數(shù)據(jù)量,選擇適合的數(shù)據(jù)庫(kù)進(jìn)行使用,以達(dá)到數(shù)據(jù)存儲(chǔ)和訪問(wèn)的更佳效果。

為了更好地對(duì)多個(gè)數(shù)據(jù)庫(kù)進(jìn)行管理,必須要對(duì)數(shù)據(jù)庫(kù)進(jìn)行分類(lèi)和歸類(lèi)。對(duì)于相似或相關(guān)的數(shù)據(jù)庫(kù),應(yīng)當(dāng)將其歸為同一類(lèi)別,方便統(tǒng)一管理。另外,由于不同的數(shù)據(jù)庫(kù)具有不同的性質(zhì)和特點(diǎn),因此在管理和操作時(shí),需要根據(jù)實(shí)際需求,精細(xì)地設(shè)置權(quán)限和操作規(guī)則,以避免不必要的錯(cuò)誤和數(shù)據(jù)泄露等情況。

再次,為了實(shí)現(xiàn)多個(gè)數(shù)據(jù)庫(kù)的協(xié)同工作,需要利用好跨數(shù)據(jù)庫(kù)的工具和技術(shù)。一些成熟的數(shù)據(jù)庫(kù)管理軟件可以通過(guò)跨數(shù)據(jù)庫(kù)的查詢、聯(lián)合操作、備份和恢復(fù)等功能,讓多個(gè)數(shù)據(jù)庫(kù)可以相互連接和協(xié)同管理,提高企業(yè)和組織的數(shù)據(jù)處理效率。

要做好數(shù)據(jù)庫(kù)備份和數(shù)據(jù)同步工作。備份可以很好地保障數(shù)據(jù)庫(kù)的安全性和可靠性,而數(shù)據(jù)同步則可以實(shí)現(xiàn)對(duì)多個(gè)數(shù)據(jù)庫(kù)的協(xié)同部署以及對(duì)數(shù)據(jù)的及時(shí)更新和變更。在具體實(shí)踐中,可以選擇一些自動(dòng)備份和數(shù)據(jù)同步工具,如數(shù)據(jù)庫(kù)鏡像、數(shù)據(jù)副本等。

正確匹配多個(gè)數(shù)據(jù)庫(kù)是非常重要的。在企業(yè)和組織規(guī)模逐漸擴(kuò)大的情況下,正確的數(shù)據(jù)庫(kù)匹配不僅可以提高數(shù)據(jù)處理的效率和質(zhì)量,同時(shí)也可以保證數(shù)據(jù)的安全性和可靠性,為企業(yè)和組織的發(fā)展提供更可靠、高效的數(shù)據(jù)支持。

相關(guān)問(wèn)題拓展閱讀:

  • 如何在django中使用多個(gè)數(shù)據(jù)庫(kù)

如何在django中使用多個(gè)數(shù)據(jù)庫(kù)

使用多個(gè)數(shù)據(jù)庫(kù)

New in Django 1.2: Please, see the release notes

大多數(shù)其他文檔都假設(shè)使用單一數(shù)據(jù)庫(kù),本文主要討論如何在 Django 中使用多個(gè)數(shù)據(jù)庫(kù)。 使用多個(gè)數(shù)據(jù)庫(kù),要增加一些步驟。

定義你的數(shù)據(jù)庫(kù)

使用多數(shù)據(jù)庫(kù)的之一步是通過(guò) DATABASES 設(shè)置要使用的數(shù)據(jù)庫(kù)服務(wù)。這個(gè) 設(shè)置用于映射數(shù)據(jù)庫(kù)別名和特定的聯(lián)結(jié)設(shè)置字典,這是 Django 定義數(shù)據(jù)庫(kù)一貫的手法。 字典內(nèi)部的設(shè)置參見(jiàn) DATABASES 文檔。

數(shù)據(jù)庫(kù)可以使用任何別名,但是 default 有特殊意義。當(dāng)沒(méi)有選擇其他數(shù)據(jù)庫(kù)時(shí), Django 總是使用別名為 default 的數(shù)據(jù)庫(kù)。因此,如果你沒(méi)有定義一個(gè)名為 default 的數(shù)據(jù)庫(kù)時(shí),你應(yīng)當(dāng)小心了,在使用數(shù)據(jù)庫(kù)前要指定你想用的數(shù)據(jù)庫(kù)。

以下是一個(gè)定義兩個(gè)數(shù)據(jù)庫(kù)的 settings.py 代碼片斷。定義了一個(gè)缺省的 PostgreSQL 數(shù)據(jù)庫(kù)和一個(gè)名為 users 的 MySQL 數(shù)據(jù)庫(kù):

DATABASES = { ‘default’: { ‘NAME’: ‘a(chǎn)pp_data’, ‘ENGINE’: ‘django.db.backends.postgresql_psycopg2’, ‘USER’: ‘postgres_user’, ‘PASSWORD’: ‘s3krit’ }, ‘users’: { ‘NAME’: ‘user_data’, ‘ENGINE’: ‘django.db.backends.mysql’, ‘USER’: ‘mysql_user’, ‘PASSWORD’: ‘priv4te’ } }

如果你嘗試訪問(wèn) DATABASES 設(shè)置中沒(méi)有定義的數(shù)據(jù)庫(kù), Django 會(huì)拋出一個(gè) django.db.utils.ConnectionDoesNotExist異常。

同步你的數(shù)據(jù)庫(kù)

syncdb 管理命令一次只操作一個(gè)數(shù)據(jù)庫(kù)。缺省情況下,它操作 default 數(shù)據(jù)庫(kù)。但是加上 –database 參數(shù),你可以讓 syncdb 同步不同的 數(shù)據(jù)庫(kù)。所頌空以要同步我們例子中的所有數(shù)據(jù)庫(kù)的所有模型可以使用如下命令:

$ ./manage.py syncdb

$ ./manage.py syncdb –database=users

如果你不是同步所有的程序到同一個(gè)數(shù)據(jù)庫(kù)中,你可定義一個(gè) 數(shù)據(jù)庫(kù)路由 來(lái)為指定的模型實(shí)施特定的控制 策略。

如果你要精細(xì)地控制同步,那么還有一種方式是修改 sqlall 的輸出,手工在 數(shù)據(jù)庫(kù)中執(zhí)行命令,命令如下:

$ ./manage.py sqlall sales | ./manage.py dbshell

使用其他管理命令

其他操作數(shù)據(jù)庫(kù)的 django-admin.py 命令與 syncdb 類(lèi)似,他們一次只 操作一個(gè)數(shù)據(jù)庫(kù),使用 –database 來(lái)控制使用哪個(gè)數(shù)據(jù)庫(kù)。

自動(dòng)數(shù)據(jù)庫(kù)路由

使用多數(shù)據(jù)庫(kù)最簡(jiǎn)單的方法是設(shè)置一個(gè)數(shù)據(jù)啟鄭庫(kù)路由方案。缺省的路由方案確保對(duì)象 “緊貼”其原本的數(shù)據(jù)庫(kù)(例如:一個(gè)對(duì)象從哪個(gè)數(shù)據(jù)庫(kù)取得,就保存回哪個(gè)數(shù)據(jù)庫(kù))。 缺省的路由方案還確保如果一個(gè)數(shù)據(jù)庫(kù)沒(méi)有指定,所有的查詢都會(huì)作用于 缺省 數(shù)據(jù) 庫(kù)。

你不必為啟動(dòng)缺省路由方案作任何事,因?yàn)樗恰伴_(kāi)箱即用”的。但是,如果你要執(zhí)行 一些更有趣的數(shù)據(jù)庫(kù)分配行為的話,你可以定義并安裝你自己的數(shù)據(jù)庫(kù)路由。

數(shù)據(jù)庫(kù)路由

一個(gè)數(shù)據(jù)庫(kù)路由是一個(gè)類(lèi),這個(gè)類(lèi)最多有四個(gè)方法:

db_for_read(model, **hints)

建議 model 對(duì)象寫(xiě)操作時(shí)使用的數(shù)據(jù)庫(kù)。

如果一個(gè)數(shù)據(jù)庫(kù)操作可以提供對(duì)選擇數(shù)據(jù)庫(kù)有用的附加信息,那么可以通過(guò) hints 字典提供。詳見(jiàn) 下文 。

如果沒(méi)有建議則返回 None 。

db_for_write(model, **hints)

建議 model 對(duì)象讀操作時(shí)使用的數(shù)據(jù)庫(kù)。

如果一悄櫻頌個(gè)數(shù)據(jù)庫(kù)操作可以提供對(duì)選擇數(shù)據(jù)庫(kù)有用的附加信息,那么可以通過(guò) hints 字典提供。詳見(jiàn) 下文 。

如果沒(méi)有建議則返回 None 。

allow_relation(obj1, obj2, **hints)

當(dāng) obj1 和 obj2 之間允許有關(guān)系時(shí)返回 True ,不允許時(shí)返回 False ,或者沒(méi)有 意見(jiàn)時(shí)返回 None 。這是一個(gè)純粹的驗(yàn)證操作,用于外鍵和多對(duì)多操作中,兩個(gè)對(duì)象 的關(guān)系是否被允許。

allow_syncdb(db, model)

決定 model 是否可以和 db 為別名的數(shù)據(jù)庫(kù)同步。如果可以返回 True , 如果不可以返回 False ,或者沒(méi)有意見(jiàn)時(shí)返回 None 。這個(gè)方法用于決定一個(gè)給定 數(shù)據(jù)庫(kù)的模型是否可用。

一個(gè)路由不必提供 所有 這些方法,可以省略其中一個(gè)或多個(gè)。如果其中一個(gè)方法被 省略了,那么 Django 會(huì)在執(zhí)行相關(guān)檢查時(shí)跳過(guò)相應(yīng)路由。

提示參數(shù)

數(shù)據(jù)庫(kù)路由接收的“提示”參數(shù)可用于決定哪個(gè)數(shù)據(jù)庫(kù)應(yīng)當(dāng)接收一個(gè)給定的請(qǐng)求。

目前,唯一可以提供的提示參數(shù)是 實(shí)例 ,即一個(gè)與讀寫(xiě)操作相關(guān)的對(duì)象的實(shí)例。 可以是一個(gè)已保存的對(duì)象的實(shí)例,也可以是一個(gè)多對(duì)多關(guān)系中添加的實(shí)例。在某些情況下, 也可能沒(méi)有對(duì)象的實(shí)例可以提供。路由會(huì)檢查提示實(shí)例是否存在,并相應(yīng)地決定是否改變 路由行為。

使用路由

數(shù)據(jù)庫(kù)路由使用 DATABASE_ROUTERS 設(shè)置來(lái)安裝。這個(gè)設(shè)置定義一個(gè)類(lèi)名稱(chēng) 列表,每個(gè)類(lèi)定義一個(gè)用于主路由 (django.db.router) 的路由。

主路由用于 Django 分配數(shù)據(jù)庫(kù)操作。當(dāng)一個(gè)查詢想要知道使用哪個(gè)數(shù)據(jù)庫(kù)時(shí),會(huì)提供 一個(gè)模型和一個(gè)提示(如果有的話),并調(diào)用主路由。

Django 就會(huì)按次序嘗試每個(gè)路由,

直到找到合適的路由建議。如果找不到路由建議就會(huì)嘗試實(shí)例提示的當(dāng)前的 _state.db 。如果沒(méi)有提供路由提示,或者實(shí)例沒(méi)有當(dāng)前數(shù)據(jù)庫(kù)狀態(tài),那么

主路由會(huì) 分配 缺省 數(shù)據(jù)庫(kù)。

一個(gè)例子

僅用于示例目的!

這個(gè)例子僅用于展示路由如何改變數(shù)據(jù)庫(kù)的使用。本例有意忽略了一些復(fù)雜的東西以 便于更好的展示路由是如何工作的。

如果任何一個(gè) myapp 中的模型包含與 另一個(gè) 數(shù)據(jù)庫(kù)中模型的關(guān)系時(shí),本例 是無(wú)效的。參見(jiàn) 跨數(shù)據(jù)庫(kù)關(guān)系一節(jié)中介紹 的 Django 引用完整性問(wèn)題。

本例的主/從配置也是有缺陷的:它沒(méi)有處理復(fù)制延時(shí)(比如因?yàn)榘褜?xiě)操作傳遞給從 數(shù)據(jù)庫(kù)耗費(fèi)時(shí)間而產(chǎn)生的查詢不一致),也沒(méi)有考慮與數(shù)據(jù)庫(kù)使用策略的交互作用。

那么,這個(gè)例子有什么用呢?本例僅用于演示一個(gè) myapp 存在于 other 數(shù)據(jù)庫(kù), 所有其他模型之間是主/從關(guān)系,且存在于 master 、 slave1 和 slave2 數(shù)據(jù)庫(kù)。本例使用了兩個(gè)路由:

class MyAppRouter(object): “”” 一個(gè)控制 myapp 應(yīng)用中模型的 所有數(shù)據(jù)庫(kù)操作的路由 “”” def db_for_read(self, model, **hints): “myapp 應(yīng)用中模型的操作指向 ‘other'” if model._meta.app_label == ‘myapp’: return ‘other’ return None def db_for_write(self, model, **hints): “myapp 應(yīng)用中模型的操作指向 ‘other'” if model._meta.app_label == ‘myapp’: return ‘other’ return None def allow_relation(self, obj1, obj2, **hints): ” 如果包含 myapp 應(yīng)用中的模型則允許所有關(guān)系 ” if obj1._meta.app_label == ‘myapp’ or obj2._meta.app_label == ‘myapp’: return True return None def allow_syncdb(self, db, model): ” 確保 myapp 應(yīng)用只存在于 ‘other’ 數(shù)據(jù)庫(kù) ” if db == ‘other’: return model._meta.app_label == ‘myapp’ elif model._meta.app_label == ‘myapp’: return False return None class MasterSlaveRouter(object): “”” 一個(gè)設(shè)置簡(jiǎn)單主/從定義 的路由 “”” def db_for_read(self, model, **hints): ” 所有讀操作指向一個(gè)隨機(jī)的從數(shù)據(jù)庫(kù) ” return random.choice() def db_for_write(self, model, **hints): ” 所有寫(xiě)操作指向主數(shù)據(jù)庫(kù) ” return ‘master’ def allow_relation(self, obj1, obj2, **hints): ” 允許數(shù)據(jù)庫(kù)池中的兩個(gè)對(duì)象間的任何關(guān)系 ” db_list = (‘master’,’slave1′,’slave2′) if obj1._state.db in db_list and obj2._state.db in db_list: return True return None def allow_syncdb(self, db, model): ” 顯示地放置所有數(shù)據(jù)庫(kù)中的模型 ” return True

然后在你的設(shè)置文件增加如下內(nèi)容(把 path.to. 替換為你定義路由的模型的路徑 ):

DATABASE_ROUTERS =

這個(gè)設(shè)置中,路由的順序是很重要的,因?yàn)椴樵儠r(shí)是按這個(gè)設(shè)置中的順序依次查詢的。上 例中, MyAppRouter 先于MasterSlaveRouter ,因此, myapp 中的模型就 優(yōu)先于其他模型。如果 DATABASE_ROUTERS 設(shè)置中兩個(gè)路由的順序變換了, 那么 MasterSlaveRouter.allow_syncdb() 會(huì)優(yōu)先執(zhí)行。因?yàn)?MasterSlaveRouter 是 包羅萬(wàn)象的,這樣就會(huì)導(dǎo)致所有模型可以使用所有數(shù)據(jù)庫(kù)。

設(shè)置好之后讓我們來(lái)運(yùn)行一些代碼:

>>> # 從 ‘credentials’ 數(shù)據(jù)庫(kù)獲得數(shù)據(jù) >>> fred = User.objects.get(username=’fred’) >>> fred.first_name = ‘Frederick’ >>> # 保存到 ‘credentials’ 數(shù)據(jù)庫(kù) >>> fred.save() >>> # 隨機(jī)從從數(shù)據(jù)庫(kù)獲得數(shù)據(jù) >>> dna = Person.objects.get(name=’Douglas Adams’) >>> # 新對(duì)象創(chuàng)建時(shí)還沒(méi)有分配數(shù)據(jù)庫(kù) >>> mh = Book(title=’Mostly Harmless’) >>> # 這個(gè)賦值會(huì)向路由發(fā)出請(qǐng)求,并把 mh 的數(shù)據(jù)庫(kù)設(shè)置為與 author 對(duì)象同樣的 >>> # 數(shù)據(jù)庫(kù) >>> mh.author = dna >>> # 這會(huì)強(qiáng)制 ‘mh’ 實(shí)例使用主數(shù)據(jù)庫(kù)… >>> mh.save() >>> # … 但如果我們重新獲取對(duì)象,就會(huì)從從數(shù)據(jù)庫(kù)中獲取 >>> mh = Book.objects.get(title=’Mostly Harmless’)

手動(dòng)選擇數(shù)據(jù)庫(kù)

Django 也提供一個(gè)可以讓你通過(guò)代碼完全控制數(shù)據(jù)庫(kù)使用的 API 。手動(dòng)定義數(shù)據(jù)庫(kù)分配 優(yōu)先于路由。

為一個(gè) 查詢集 手動(dòng)選擇一個(gè)數(shù)據(jù)庫(kù)

你可以在 查詢集 “鏈”中的任何點(diǎn)為 查詢集 選擇數(shù)據(jù)庫(kù)。我們通過(guò)在 查詢集 上調(diào)用 using() 來(lái)得到使用指定數(shù)據(jù)庫(kù)的另一個(gè) 查詢集 。

using() 使用一個(gè)參數(shù):你想要運(yùn)行查詢的數(shù)據(jù)庫(kù)的別名。例如:

>>> # 這會(huì)運(yùn)行在“缺省”數(shù)據(jù)庫(kù)上。 >>> Author.objects.all() >>> # 這同樣會(huì)運(yùn)行在“缺省”數(shù)據(jù)庫(kù)上。 >>> Author.objects.using(‘default’).all() >>> # 這會(huì)運(yùn)行在“ other ”數(shù)據(jù)庫(kù)上。 >>> Author.objects.using(‘other’).all()

為 save() 選擇一個(gè)數(shù)據(jù)庫(kù)

在使用 Model.save() 時(shí)加上 using 關(guān)鍵字可以指定保存到哪個(gè)數(shù)據(jù)庫(kù)。

例如,要把一個(gè)對(duì)象保存到 legacy_users 數(shù)據(jù)庫(kù)應(yīng)該這樣做:

>>> my_object.save(using=’legacy_users’)

如果你不定義 using ,那么 save() 方法會(huì)根據(jù)路由分配把數(shù)據(jù)保存到缺省 數(shù)據(jù)庫(kù)中。

把一個(gè)對(duì)象從一個(gè)數(shù)據(jù)庫(kù)移動(dòng)到另一個(gè)數(shù)據(jù)庫(kù)

當(dāng)你已經(jīng)在一個(gè)數(shù)據(jù)庫(kù)中保存了一個(gè)對(duì)象后,你可能會(huì)使用 save(using=…) 把這個(gè) 對(duì)象移動(dòng)到另一個(gè)數(shù)據(jù)庫(kù)中。但是,如果你沒(méi)有使用恰當(dāng)?shù)姆椒?,那么可能?huì)出現(xiàn)意想不 到的后果。

假設(shè)有如下的例子:

>>> p = Person(name=’Fred’) >>> p.save(using=’first’) # (之一句) >>> p.save(using=’second’) # (第二名)

在之一名中,一個(gè)新的 Person 對(duì)象被保存到 first 數(shù)據(jù)庫(kù)中。這時(shí), p 還沒(méi)有一個(gè)主鍵,因此 Django 執(zhí)行了一個(gè)INSERT SQL 語(yǔ)句。這樣就會(huì)創(chuàng)建一個(gè) 主鍵,并將這個(gè)主鍵分配給 p 。

在第二句中,因?yàn)?p 已經(jīng)有了一個(gè)主鍵,所以 Django 在保存對(duì)象時(shí)會(huì)嘗試在新的 數(shù)據(jù)庫(kù)中使用這個(gè)主鍵。如果 second數(shù)據(jù)庫(kù)中沒(méi)有使用這個(gè)主鍵,那就不會(huì)有問(wèn)題, 該對(duì)象會(huì)復(fù)制到新數(shù)據(jù)庫(kù)。

然而,如果 p 的主鍵在 second 數(shù)據(jù)庫(kù)中已經(jīng)使用過(guò)了,那么 second 使用 這個(gè)主鍵的已存在的對(duì)象將會(huì)被 p 覆蓋。

有兩種方法可以避免上述情況的發(fā)生。之一,你可以清除實(shí)例的主鍵。如果一個(gè)對(duì)象沒(méi)有 主主鍵,那么 Django 會(huì)把它看作一個(gè)新對(duì)象,在保存到 second 數(shù)據(jù)庫(kù)中時(shí)就不會(huì) 帶來(lái)數(shù)據(jù)的損失:

>>> p = Person(name=’Fred’) >>> p.save(using=’first’) >>> p.pk = None # 清除主鍵。 >>> p.save(using=’second’) # 寫(xiě)入一個(gè)全新的對(duì)象。

第二種方法是在 save() 方法中使用 force_insert 選項(xiàng)來(lái)保證 Django 執(zhí)行 一個(gè) INSERT SQL:

>>> p = Person(name=’Fred’) >>> p.save(using=’first’) >>> p.save(using=’second’, force_insert=True)

這樣可以保證名為 Fred 的人員在兩個(gè)數(shù)據(jù)庫(kù)中使用相同的主鍵。如果在保存到 second 數(shù)據(jù)庫(kù)時(shí)主鍵已被占用,會(huì)拋出一個(gè)錯(cuò)誤。

選擇一個(gè)要?jiǎng)h除數(shù)據(jù)的數(shù)據(jù)庫(kù)

缺省情況下,一個(gè)現(xiàn)存對(duì)象從哪個(gè)數(shù)據(jù)庫(kù)得到,刪除這個(gè)對(duì)象也會(huì)在這個(gè)數(shù)據(jù)庫(kù)中進(jìn)行:

>>> u = User.objects.using(‘legacy_users’).get(username=’fred’) >>> u.delete() # 會(huì)從 `legacy_users` 數(shù)據(jù)庫(kù)中刪除

通過(guò)向 Model.delete() 方法傳遞 using 關(guān)鍵字參數(shù)可以定義在哪個(gè)數(shù)據(jù)庫(kù)中刪除 數(shù)據(jù)。 using 的用法與 save() 方法中使用這個(gè)參數(shù)類(lèi)似。

例如,假設(shè)我們要把一個(gè)用戶從 legacy_users 數(shù)據(jù)庫(kù)移動(dòng)到 new_users 數(shù)據(jù)庫(kù) 可以使用如下命令:

>>> user_obj.save(using=’new_users’) >>> user_obj.delete(using=’legacy_users’)

多數(shù)據(jù)庫(kù)情況下使用管理器

在管理器上使用 db_manager() ,可以讓管理器訪問(wèn)一個(gè)非缺省數(shù)據(jù)庫(kù)。

例如,假設(shè)你有一個(gè)操作數(shù)據(jù)庫(kù)的自定義管理器 User.objects.create_user() 。

因?yàn)?create_user() 是一個(gè)管理器方法,不是一個(gè) 查詢集 ,所以你不能

用 User.objects.using(‘new_users’).create_user() 。( create_user() 方法

只能用于 User.objects 管理器,而不能用于,管理器衍生出的 查詢集 。) 解決方法是使用 db_manager() ,就象下面這樣:

User.objects.db_manager(‘new_users’).create_user(…)

db_manager() 返回的是綁定到你指定的數(shù)據(jù)庫(kù)的管理器的一個(gè)副本。

多數(shù)據(jù)庫(kù)情況下使用 get_query_set()

如果你在管理器中重載了 get_query_set() ,請(qǐng)確保在其父類(lèi)中也調(diào)用了相同的方法 (使用 super() )或者正確處理管理器中的 _db 屬性(一個(gè)包含要使用的數(shù)據(jù)庫(kù) 名稱(chēng)的字符串)。

例如,如果你要從 get_query_set 方法返回一個(gè)自定義 查詢集 類(lèi),那么你可以 這樣做:

class MyManager(models.Manager): def get_query_set(self): qs = CustomQuerySet(self.model) if self._db is not None: qs = qs.using(self._db) return qs

在 Django 管理接口中使用多數(shù)據(jù)庫(kù)

Django 的管理接口沒(méi)有明顯支持多數(shù)據(jù)庫(kù)。如果想要支持的話你必須寫(xiě)自定義 ModelAdmin 。

如果要支持多數(shù)據(jù)庫(kù),那么 ModelAdmin 對(duì)象有五個(gè)方法要自定義:

關(guān)于怎么匹配出多個(gè)數(shù)據(jù)庫(kù)的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。

成都網(wǎng)站推廣找創(chuàng)新互聯(lián),老牌網(wǎng)站營(yíng)銷(xiāo)公司
成都網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián)(www.cdcxhl.com)專(zhuān)注高端網(wǎng)站建設(shè),網(wǎng)頁(yè)設(shè)計(jì)制作,網(wǎng)站維護(hù),網(wǎng)絡(luò)營(yíng)銷(xiāo),SEO優(yōu)化推廣,快速提升企業(yè)網(wǎng)站排名等一站式服務(wù)。IDC基礎(chǔ)服務(wù):云服務(wù)器、虛擬主機(jī)、網(wǎng)站系統(tǒng)開(kāi)發(fā)經(jīng)驗(yàn)、服務(wù)器租用、服務(wù)器托管提供四川、成都、綿陽(yáng)、雅安、重慶、貴州、昆明、鄭州、湖北十堰機(jī)房互聯(lián)網(wǎng)數(shù)據(jù)中心業(yè)務(wù)。


當(dāng)前標(biāo)題:如何正確匹配多個(gè)數(shù)據(jù)庫(kù)? (怎么匹配出多個(gè)數(shù)據(jù)庫(kù))
文章來(lái)源:http://www.dlmjj.cn/article/cojiodc.html