中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Django如何更新models數據庫結構

發布時間:2021-05-08 09:58:19 來源:億速云 閱讀:333 作者:小新 欄目:開發技術

小編給大家分享一下Django如何更新models數據庫結構,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

有時候在我們使用Django設計了models中的數據庫結構,并且已經同步了數據庫之后,我們突然想在數據表中更新或者增加新的字段,也就是需要修改數據庫的結構,會出現以下的問題:

C:\Users\Administrator\Desktop\Web開發\Django_Demo\jkxy>python manage.py makemigrations
You are trying to add a non-nullable field 'grade' to student without a default; we can't do that (the dat
abase needs something to populate existing rows).
Please select a fix:
1) Provide a one-off default now (will be set on all existing rows with a null value for this column)
2) Quit, and let me add a default in models.py
Select an option:

就是在我們在models中修改了表的字段后,進行python manage.py makemigrations同步數據庫時會出現上面報錯,會導致數據庫結構更新失敗

解決方法如下:

第一種方式:先刪除再重構

1、刪除數據庫對應的數據表

注意:在這里可以不用暴力刪除數據表,可以利用django的migrations進行,操作如下:

1.1、首先將自己需要重構的數據表類的models注釋掉,然后輸入命令python manage.py makemigrations,這個時候migration會自動記錄刪除數據表的操作

Django如何更新models數據庫結構

Django如何更新models數據庫結構

1.2、然后在輸入命令python manage.py migrate,Django會自動將本地對應的數據庫進行刪除

Django如何更新models數據庫結構

2、刪除應用當中的migrations文件

3、刪除應用當中的pychace文件

4、刪除db_sqllite文件(若配置數據庫為mysql時,可以刪除db_sqllite)

5、建立一個空數據庫,命令為python manage.py makemigrations --empty 應用名稱

C:\Users\Administrator\Desktop\Web開發\Django_Demo\jkxy>python manage.py makemigrations --empty bbs
Migrations for 'bbs':
bbs\migrations\0001_initial.py

6、同步數據庫:

python manage.py makemigrations
python manage.py migrate

 
C:\Users\Administrator\Desktop\Web開發\Django_Demo\jkxy>python manage.py makemigrations --empty bbs
Migrations for 'bbs':
 bbs\migrations\0001_initial.py
 
C:\Users\Administrator\Desktop\Web開發\Django_Demo\jkxy>python manage.py makemigrations
Migrations for 'bbs':
 bbs\migrations\0002_student_testmyfield.py
 - Create model Student
 - Create model Testmyfield
 
C:\Users\Administrator\Desktop\Web開發\Django_Demo\jkxy>python manage.py migrate
Operations to perform:
 Apply all migrations: admin, auth, bbs, contenttypes, sessions
Running migrations:
 Applying contenttypes.0001_initial... OK
 Applying auth.0001_initial... OK
 Applying admin.0001_initial... OK
 Applying admin.0002_logentry_remove_auto_add... OK
 Applying contenttypes.0002_remove_content_type_name... OK
 Applying auth.0002_alter_permission_name_max_length... OK
 Applying auth.0003_alter_user_email_max_length... OK
 Applying auth.0004_alter_user_username_opts... OK
 Applying auth.0005_alter_user_last_login_null... OK
 Applying auth.0006_require_contenttypes_0002... OK
 Applying auth.0007_alter_validators_add_error_messages... OK
 Applying auth.0008_alter_user_username_max_length... OK
 Applying bbs.0001_initial... OK
 Applying bbs.0002_student_testmyfield... OK
 Applying sessions.0001_initial... OK

第二種方式:直接在原結構上更新結構

#出版社
class Publisher(models.Model):
 '''出版社數據表'''
 id=models.AutoField(primary_key=True) #自增ID主鍵
 name=models.CharField(max_length=50,verbose_name='出版社名稱',null=False,unique=True)
 
 def __str__(self):
  return '{},{}'.format(self.id,self.name)

接下來我們需要新增一個字段addr地址

#出版社
class Publisher(models.Model):
 '''出版社數據表'''
 id=models.AutoField(primary_key=True) #自增ID主鍵
 name=models.CharField(max_length=50,verbose_name='出版社名稱',null=False,unique=True)
 addr=models.CharField(max_length=128,verbose_name='出版社地址')
 
 def __str__(self):
  return '{},{}'.format(self.id,self.name,self.addr)

由于我們的數據庫的Publisher表本身已經有數據了,所以我們在進行python manage.py makemigrations會出現以下錯誤:

Django如何更新models數據庫結構

上圖的意思是說addr沒有默認值,無法更新到數據庫中,然后給出了兩個選項:

第一是讓你馬上給定一個默認值,然后一次性的把所有addr都寫成這個值

第二是先退出,你自己在models里面去配置默認值

我選擇先退出,在models中加上默認值,在進行makemigrations,這次就會更新成功了!

#出版社
class Publisher(models.Model):
 '''出版社數據表'''
 id=models.AutoField(primary_key=True) #自增ID主鍵
 name=models.CharField(max_length=50,verbose_name='出版社名稱',null=False,unique=True)
 addr=models.CharField(max_length=128,verbose_name='出版社地址',default='成都市動物園')
 
 def __str__(self):
  return '{},{}'.format(self.id,self.name,self.addr)

Django如何更新models數據庫結構

讓我們來檢查數據庫中的數據表:

Django如何更新models數據庫結構

可以看到數據結構發生了變化!

看完了這篇文章,相信你對“Django如何更新models數據庫結構”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

邳州市| 治县。| 博野县| 卓资县| 九江市| 连城县| 满城县| 鞍山市| 西畴县| 黄梅县| 扶余县| 东港市| 瑞金市| 尼木县| 衡南县| 剑阁县| 离岛区| 锡林浩特市| 历史| 梅河口市| 无极县| 永泰县| 固镇县| 繁昌县| 河曲县| 山西省| 鄯善县| 姚安县| 昆山市| 高雄县| 通江县| 嘉祥县| 疏附县| 安陆市| 棋牌| 丹江口市| 昌都县| 东乌珠穆沁旗| 炎陵县| 郯城县| 扬州市|