Django09 更改資料表

2021-08-02 02:48:59 字數 4462 閱讀 4369

« django 自定義field

django 後台 » 1

2

python manage.py makemigrations

python manage.py migrate

這兩行命令就會對我們的models.py 進行檢測,自動發現需要更改的,應用到資料庫中去。

寫過django專案的同學,必然會遇到這個問題:

在django 1.6以及以前的版本中,我們測試,當發現model要改,怎麼辦?

我們修改了 models.py 之後,我們執行:

1

python manage.py syncdb

這句話只會將我們在 models.py 中新加的類建立相應的表。

對於原來有的,現在刪除了的類,django 會詢問是否要刪除資料庫中已經存在的相關資料表。

如果在原來的類上增加字段或者刪除字段,可以參考這個命令:

1

給出的sql語句,然後自己手動到資料庫執行 sql 。但是這樣非常容易出錯!

1, 安裝south

1

(sudo) pipinstallsouth

2. 使用方法

乙個好的程式使用起來必定是簡單的,south和它的宗旨一樣,使用簡單。只需要簡單幾步,針對已經建好model和建立完表的應用。

1

2

3

4

5

6

7

8

9

10

11

12

=(

'django.contrib.admin',

'django.contrib.auth',

'django.contrib.contenttypes',

'django.contrib.sessions',

'django.contrib.messages',

'django.contrib.staticfiles',

'blog',

'south',

)

修改好後執行一次 python manage.py syncdb,django會新建乙個 south_migrationhistory 表,用來記錄資料表更改(migration)的歷史紀錄。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

$ python manage.py syncdb

syncing...

creating tables ...

creating table south_migrationhistory

installing custom sql ...

installing indexes ...

no fixtures found.

synced:

> django.contrib.admin

> django.contrib.auth

> django.contrib.contenttypes

> django.contrib.sessions

> django.contrib.messages

> django.contrib.staticfiles

> blog

> south

not synced (use migrations):

1

$ python manage.py convert_to_south blog

你會發現blog資料夾中多了乙個 migrations 目錄,裡面有乙個 0001_initial.py 檔案。

1

python manage.py migrate blog --fake

意思是這個表我以前已經建好了,用 south 只是紀一下這個建立記錄,下次 migrate 的時候不必再建立了。

原理就是 south_migrationhistory 中記錄下了 models.py 的修改的歷史,下次再修改時會和最近一次記錄比較,發現改變了什麼,然後生成相應的對應檔案,最終執行相應的 sql 更改原有的資料表。

接著,當你對 blog.models 做任何修改後,只要執行:

1

$ python manage.py schemamigration blog --auto

south就會幫助我們找出哪些地方做了修改,如果你新增的資料表沒有給default值,並且沒有設定null=true, south會問你一些問題,因為新增的column對於原來的舊的資料不能為null的話就得有乙個值。順利的話,在migrations資料夾下會產生乙個0002_add_mobile_column.py,但是這一步並沒有真正修改資料庫的表,我們需要執行python manage.py migrate :

1

2

3

4

5

6

$ python manage.py migrate

running migrationsforblog:

- migrating forwards to 0002_add_mobile_column.

> blog:0002_add_mobile_column

- loading initial dataforblog.

no fixtures found.

這樣所做的更改就寫入到了資料庫中了。

恢復到以前

south好處就是可以隨時恢復到之前的乙個版本,比如我們想要回到最開始的那個版本:

1

2

3

4

5

> python manage.py migrate blog 0001

- soft matched migration 0001 to 0001_initial.

running migrationsforblog:

- migrating backwards to just after 0001_initial.

< blog:0002_add_mobile_column

這樣就搞定了,資料庫就恢復到以前了,比你手動更改要方便太多了。

五 更改資料表

一般 建立好以後,很可能需要修改和表相關的內容。如修改表名,修改列名,型別,增加列等等。刪除列,alter table 表名 drop 列名 alter table student drop name 這樣就刪除了表中name那一列。增加列,增加時可以指定列名,和字元型別和列的位置順序,這是型別等等...

建立資料表和修改資料表

建立表 sql中建立和刪除資料庫物件的語句被稱為資料定義語言 data definition language,ddl 操作這些物件中資料的語句被稱為資料操作語言 data manipulation language,dml 建立語句屬於ddl,用create table命令 create temp...

MySQL 修改資料表

修改資料表是指修改資料庫中已有資料表的結構。mysql 使用 alter table 語句修改表。mysql 通過 alter table 語句修改表名,語法規則如下 alter table 舊表名 rename to 新錶名 其中 to 為可選引數,使用與否均不影響結果。修改欄位的資料型別,就是把...