成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

Django如何更新models數(shù)據(jù)庫(kù)結(jié)構(gòu)-創(chuàng)新互聯(lián)

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

創(chuàng)新互聯(lián)專(zhuān)業(yè)為企業(yè)提供新樂(lè)網(wǎng)站建設(shè)、新樂(lè)做網(wǎng)站、新樂(lè)網(wǎng)站設(shè)計(jì)、新樂(lè)網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)與制作、新樂(lè)企業(yè)網(wǎng)站模板建站服務(wù),十年新樂(lè)做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。

有時(shí)候在我們使用Django設(shè)計(jì)了models中的數(shù)據(jù)庫(kù)結(jié)構(gòu),并且已經(jīng)同步了數(shù)據(jù)庫(kù)之后,我們突然想在數(shù)據(jù)表中更新或者增加新的字段,也就是需要修改數(shù)據(jù)庫(kù)的結(jié)構(gòu),會(huì)出現(xiàn)以下的問(wèn)題:

C:\Users\Administrator\Desktop\Web開(kāi)發(fā)\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:

就是在我們?cè)趍odels中修改了表的字段后,進(jìn)行python manage.py makemigrations同步數(shù)據(jù)庫(kù)時(shí)會(huì)出現(xiàn)上面報(bào)錯(cuò),會(huì)導(dǎo)致數(shù)據(jù)庫(kù)結(jié)構(gòu)更新失敗

解決方法如下:

第一種方式:先刪除再重構(gòu)

1、刪除數(shù)據(jù)庫(kù)對(duì)應(yīng)的數(shù)據(jù)表

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

1.1、首先將自己需要重構(gòu)的數(shù)據(jù)表類(lèi)的models注釋掉,然后輸入命令python manage.py makemigrations,這個(gè)時(shí)候migration會(huì)自動(dòng)記錄刪除數(shù)據(jù)表的操作

Django如何更新models數(shù)據(jù)庫(kù)結(jié)構(gòu)

Django如何更新models數(shù)據(jù)庫(kù)結(jié)構(gòu)

1.2、然后在輸入命令python manage.py migrate,Django會(huì)自動(dòng)將本地對(duì)應(yīng)的數(shù)據(jù)庫(kù)進(jìn)行刪除

Django如何更新models數(shù)據(jù)庫(kù)結(jié)構(gòu)

2、刪除應(yīng)用當(dāng)中的migrations文件

3、刪除應(yīng)用當(dāng)中的pychace文件

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

5、建立一個(gè)空數(shù)據(jù)庫(kù),命令為python manage.py makemigrations --empty 應(yīng)用名稱(chēng)

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

6、同步數(shù)據(jù)庫(kù):

python manage.py makemigrations
python manage.py migrate

 
C:\Users\Administrator\Desktop\Web開(kāi)發(fā)\Django_Demo\jkxy>python manage.py makemigrations --empty bbs
Migrations for 'bbs':
 bbs\migrations\0001_initial.py
 
C:\Users\Administrator\Desktop\Web開(kāi)發(fā)\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開(kāi)發(fā)\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

第二種方式:直接在原結(jié)構(gòu)上更新結(jié)構(gòu)

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

接下來(lái)我們需要新增一個(gè)字段addr地址

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

由于我們的數(shù)據(jù)庫(kù)的Publisher表本身已經(jīng)有數(shù)據(jù)了,所以我們?cè)谶M(jìn)行python manage.py makemigrations會(huì)出現(xiàn)以下錯(cuò)誤:

Django如何更新models數(shù)據(jù)庫(kù)結(jié)構(gòu)

上圖的意思是說(shuō)addr沒(méi)有默認(rèn)值,無(wú)法更新到數(shù)據(jù)庫(kù)中,然后給出了兩個(gè)選項(xiàng):

第一是讓你馬上給定一個(gè)默認(rèn)值,然后一次性的把所有addr都寫(xiě)成這個(gè)值

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

我選擇先退出,在models中加上默認(rèn)值,在進(jìn)行makemigrations,這次就會(huì)更新成功了!

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

Django如何更新models數(shù)據(jù)庫(kù)結(jié)構(gòu)

讓我們來(lái)檢查數(shù)據(jù)庫(kù)中的數(shù)據(jù)表:

Django如何更新models數(shù)據(jù)庫(kù)結(jié)構(gòu)

可以看到數(shù)據(jù)結(jié)構(gòu)發(fā)生了變化!

看完了這篇文章,相信你對(duì)“Django如何更新models數(shù)據(jù)庫(kù)結(jié)構(gòu)”有了一定的了解,如果想了解更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!

本文題目:Django如何更新models數(shù)據(jù)庫(kù)結(jié)構(gòu)-創(chuàng)新互聯(lián)
網(wǎng)站URL:http://jinyejixie.com/article20/dedsjo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)公司網(wǎng)站內(nèi)鏈、外貿(mào)網(wǎng)站建設(shè)品牌網(wǎng)站制作、網(wǎng)站排名云服務(wù)器

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

微信小程序開(kāi)發(fā)
民勤县| 新蔡县| 沂南县| 长汀县| 武夷山市| 双峰县| 安龙县| 甘洛县| 宝兴县| 阳信县| 高清| 保德县| 措美县| 扬州市| 同德县| 南川市| 房山区| 舞阳县| 曲麻莱县| 抚远县| 襄城县| 曲松县| 和田市| 灵丘县| 舞钢市| 桂林市| 通州区| 怀安县| 吕梁市| 合作市| 左权县| 子长县| 锦屏县| 韶山市| 衡南县| 宁德市| 托克托县| 抚顺县| 筠连县| 汝州市| 盐池县|