雖然Django最適合用來(lái)開(kāi)發(fā)新的應(yīng)用,但也可以將它整合到遺留的數(shù)據(jù)庫(kù)中。Django包含了很多工具,盡可能自動(dòng)化解決這類問(wèn)題。
這篇文章假設(shè)你了解Django的基礎(chǔ)部分,它們?cè)诮坛讨刑峒啊?/p>
一旦你的Django環(huán)境建立好之后,你可以按照這個(gè)大致的流程,整合你的現(xiàn)有數(shù)據(jù)庫(kù)。
你需要告訴Django你的數(shù)據(jù)庫(kù)連接參數(shù),以及數(shù)據(jù)庫(kù)的名稱。請(qǐng)修改DATABASES設(shè)置,為'默認(rèn)' 連接的以下鍵賦值:
Django自帶叫做inspectdb的工具,可以按照現(xiàn)有的數(shù)據(jù)庫(kù)創(chuàng)建模型。你可以運(yùn)行以下命令,并查看輸出:
$ python manage.py inspectdb
通過(guò)重定向Unix標(biāo)準(zhǔn)輸出流來(lái)保存文件:
$ python manage.py inspectdb > models.py
這個(gè)特性是一個(gè)快捷方式,并不是一個(gè)確定的模型生成器。詳見(jiàn)inspectdb文檔 。
一旦你創(chuàng)建好了你的模型,把文件命名為models.py,然后把它放到你應(yīng)用的Python包中。然后把應(yīng)用添加到你的INSTALLED_APPS 設(shè)置中。
默認(rèn)情況下,inspectdb創(chuàng)建未被管理的模型。這就是說(shuō),模型的Meta類中的managed = False告訴Django不要管理每個(gè)表的創(chuàng)建、修改和刪除:
class Person(models.Model):
id = models.IntegerField(primary_key=True)
first_name = models.CharField(max_length=70)
class Meta:
managed = False
db_table = 'CENSUS_PERSONS'
如果你希望Django管理表的生命周期,你需要把managed選項(xiàng)改為 True(或者簡(jiǎn)單地把它移除,因?yàn)門rue是默認(rèn)值)。
接下來(lái),運(yùn)行migrate命令來(lái)安裝所有所需的額外的數(shù)據(jù)庫(kù)記錄,比如后臺(tái)權(quán)限和內(nèi)容類型:
$ python manage.py migrate
上面就是所有基本的步驟了 —— 到目前為止你會(huì)想要調(diào)整Django自動(dòng)生成的模型,直到他們按照你想要的方式工作。嘗試通過(guò)Django數(shù)據(jù)庫(kù)API訪問(wèn)你的數(shù)據(jù),并且嘗試使用Django后臺(tái)頁(yè)面編輯對(duì)象,以及相應(yīng)地編輯模型文件。