2016-05-26 50 views
1

mongdb和django之間的隔離依賴性如何工作?MongoDB和Django之間的依賴關係是如何隔離的?

我用JAVA/SPRING做了幾個項目,最近幾天我在學Python django。

我成功地獲得了django和sqlite之間的連接,而前幾天,當我嘗試連接到mongodb時, 因爲django-admin很難分開依賴關係數據庫和django。

Django-admin需要爲每個模型獲取特定的字段,但是,每個數據庫都有各自的Field屬性。因此,當項目應該改變數據庫結構時,我們應該在model.py中改變很多代碼。

e.g

如果源碼到MongoDB的?只使用不同的驅動程序不能使服務器工作。例如models.TextField(sqlite) - > models.StringField(mongodb)。這是不可避免的,對吧?在數據庫和django之間完全依賴關係似乎有點困難

沒問題?我想念什麼?

回答

0

如果sqlite到Mongodb怎麼辦?只使用不同的驅動程序不能使服務器工作。例如models.TextField(sqlite) - > models.StringField(mongodb)。這是不可避免的,對吧?這似乎很難說溶膠化完全的數據庫和Django的

TextFieldStringField之間的依賴關係是不是你會出現問題,因爲它是在幾乎所有的數據庫都支持,但考慮到這個庫django-mongodb-engine,它重用基本字段已經存在於Django ORM的範圍內,例如

class Post(models.Model): 
    title = models.CharField() <-- both Django ORM and mongodb-engine have this 
    text = models.TextField() <-- both Django ORM and mongodb-engine have this 

這個模型將作爲既是SQL和MongoDB引擎,但如果你(在不違約的Django ORM引擎)功能使用MongoDB的,只有像ListField()

class Post(models.Model): 
    title = models.CharField() 
    text = models.TextField() 
    tags = ListField() # <-- not supported everywhere 

然後你遷移到SQL引擎將涉及一些手動工作來映射該字段。

因此,當項目應該改變數據庫結構時,我們應該在models.py中更改很多代碼。沒關係嗎?

通常情況是,要更改數據庫結構,請在models.py中進行更改。之後,您將運行migration,這是生成腳本以更改數據庫的步驟(例如添加新的SQL表列)。對於MongoDB,沒有明確的遷移,因爲它的模式是靈活的(如果您願意,可以使用無模式)。

至於管理員,在涉及到Django模型時相當聰明,您可能需要定義要顯示在管理員中的模型和字段,但在詳細視圖中,您不必擔心每個單場,基於在models.py

的信息,並修改數據庫驅動程序Django管理理解他們,這是在settings.py

+0

DATABASES值再次非常感謝你爲這個豐富有益的指導和信息。我應該更好地學習與你的聯繫。 –

相關問題