Django如何更新數據庫

本文轉自:牆外行人

先說句閒話,Git真是深似海…

總所周知Django對數據庫的操作包裝做的非常靚,絕大數對數據庫的訪問全都轉變成了普通的對象訪問,對Web編程而言確實是個福音吧。Manage.py中有個syncdb命令就體現出了這個意思,但是這個命令也有個缺陷:即只能創建新表,而不能對舊錶做修改。什麼意思呢?就是如果你一開始新建了一個Model,裏面有個屬性比如說Char的長度是10,後來你想改成100,只用syncdb命令是辦不到,據我所知其他命令也不行,只能直接對數據庫進行操作。另外,一旦數據庫變得很龐大,據說有個South可以很好的處理這方面的問題,還沒仔細看過,以後再說。

爲了講清楚怎麼更新數據庫,我們還是以例子爲例子。假如一開始你有個models.py如下:

from django.db import models
 
class Book(models.Model):
    name = models.CharField(max_length = 10)

在該Web文件的根目錄下執行:

python manage.py sqlall book > book.old.sql

該book.old.sql文件長成這樣:

BEGIN;
CREATE TABLE `book_book` (
    `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
    `name` varchar(10) NOT NULL
)
;
COMMIT;

此時因爲一些需求,你得把Book類的中name變量的max_length改成100,直接修改文件是不行的,你還得同步到數據庫中;經上面所述我們必須得對數據庫進行直接操作,所以修改完Book類之後,我們以同樣的方式生成book.new.sql。執行以下命令得到兩次的區別:

diff book.old.sql book.new.sql > book.update.sql

之後也許我們得有一點點數據庫的操作知識,根據每個不同點,修改爲對數據庫的修改操作,如上面的例子,我們可以修改book.update.sql文件爲如下update.sql文件:

use xxx;
alter table book_book modify column name varchar(100) ;

其中第一行表示我們要操作的數據庫名字,由xxx表示;第二行是根據剛纔的book.update.sql文件,發現區別有varchar的長度,根據mysql的語法,我們簡單修改爲修改語句即可。接着我們只需要執行下面語句,即可完成對數據庫的更新:

mysql -u root -p < update.sql

當然以上的操作還是有些煩,但是很多時候還是很實用的,比如你偶爾加一個變量只需要該成add column,偶爾加一個Model類什麼的就什麼都不要改動。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章