Django為何用Python代碼定義資料模型

來源:互聯網
上載者:User

MTV裡的M代表模型。 Django模型是用Python代碼形式表述的資料在資料庫中的定義。對資料層來說它等同於 CREATE TABLE 語句,只不過執行的是Python代碼而不是 SQL,而且還包含了比資料庫欄位定義更多的含義。Django用模型在後台執行SQL代碼並把結果用Python的資料結構來描述。 Django也使用模型來呈現SQL無法處理的進階概念。

1 from django.db import models
2
3 class Publisher(models.Model):
4 name = models.CharField(max_length=30)
5 address = models.CharField(max_length=50)
6 city = models.CharField(max_length=30)
7 website = models.URLField()

 

如果你對資料庫很熟悉,你可能馬上就會想到,用Python來定義資料模型是不是有點多餘? Django這樣做是有下面幾個原因的:

1. 自省(運行時自動識別資料庫)會導致過載和有資料完整性問題。為了提供方便的資料訪問API, Django需要以某種方式知道資料庫層內部資訊,有兩種實現方式。第一種方式是用Python明確地定義資料模型,第二種方式是通過自省來自動偵測識別資料模型。

第二種方式看起來更清晰,因為資料表資訊只存放在一個地方-資料庫裡,但是會帶來一些問題。首先,運行時掃描資料庫會帶來嚴重的系統過載。如果每個請求都要掃描資料庫的表結構,或者即便是服務啟動時做一次都是會帶來不能接受的系統過載。(有人認為這個程度的系統過載是可以接受的,而Django開發人員的目標是儘可能地降低架構的系統過載)。第二,某些資料庫,尤其是老版本的MySQL,並未完整儲存那些精確的自省中繼資料。

2. 編寫Python代碼是非常有趣的,保持用Python的方式思考會避免你的大腦在不同領域來回切換。儘可能的保持在單一的編程環境/思想狀態下可以協助你提高生產率。不得不去重複寫SQL,再寫Python代碼,再寫SQL,…,會讓你頭都要裂了。

3. 把資料模型用代碼的方式表述來讓你可以容易對它們進資料列版本設定。這樣,你可以很容易瞭解資料層的變動情況。

4. SQL只能描述特定類型的資料欄位。例如,大多數資料庫都沒有專用的欄位類型來描述Email地址、URL。而用Django的模型可以做到這一點。好處就是進階的資料類型帶來更高的效率和更好的代碼複用。

5. SQL還有在不同資料庫平台的相容性問題。發布Web應用的時候,使用Python模組描述資料庫結構資訊可以避免為MySQL, PostgreSQL, and SQLite編寫不同的CREATE TABLE。

 

當然,這個方法也有一個缺點,就是Python代碼和資料庫表的同步問題。 如果你修改了一個Django模型, 你要自己來修改資料庫來保證和模型同步。

$python manage.py syncdb //不能將模型的修改或刪除同步到資料庫
$python manage.py dbshell //依據DATABASE_SERVER的裡設定自動檢測使用哪種命令列用戶端

當修改或刪除資料模型時,執行上述命令什麼也不會發生(只有添加新模型或新app時才起作用)。因此,執行上述命令是安全的,因為它不會重複執行定義的SQL.

解決這個問題一般用以下策略:

  1. 修改models.py裡的模型定義,用python manage.py sqlall查看新的sql語句。
  2. 在dbshell或db用戶端使用alter table做欄位的增刪改等操作。

 

最後,提醒你Django提供了工具 + 生產力來從現有的資料庫表中自動掃描產生模型。 這對已有的資料庫來說是非常快捷有用的。 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.