亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

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

瀏覽:26日期:2024-10-13 16:01:52

有時(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:UsersAdministratorDesktopWeb開(kāi)發(fā)Django_Demojkxy>python manage.py makemigrationsYou are trying to add a non-nullable field ’grade’ to student without a default; we can’t do that (the database 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.pySelect 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:UsersAdministratorDesktopWeb開(kāi)發(fā)Django_Demojkxy>python manage.py makemigrations --empty bbsMigrations for ’bbs’:bbsmigrations0001_initial.py

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

python manage.py makemigrationspython manage.py migrate C:UsersAdministratorDesktopWeb開(kāi)發(fā)Django_Demojkxy>python manage.py makemigrations --empty bbsMigrations for ’bbs’: bbsmigrations0001_initial.py C:UsersAdministratorDesktopWeb開(kāi)發(fā)Django_Demojkxy>python manage.py makemigrationsMigrations for ’bbs’: bbsmigrations0002_student_testmyfield.py - Create model Student - Create model Testmyfield C:UsersAdministratorDesktopWeb開(kāi)發(fā)Django_Demojkxy>python manage.py migrateOperations to perform: Apply all migrations: admin, auth, bbs, contenttypes, sessionsRunning 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ā)生了變化!

以上這篇Django更新models數(shù)據(jù)庫(kù)結(jié)構(gòu)步驟就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Django
相關(guān)文章:
主站蜘蛛池模板: 小明明看看视频永久免费网 | 本道久久综合88全国最大色 | 国产精品亚洲一区二区在线观看 | 性欧美一级毛片在线播放 | 麻豆影视大全 | www.黄色片网站 | a级黄色网址 | 国产成人永久免费视 | 亚洲欧美日韩不卡一区二区三区 | 久久青娱乐 | 青青操精品 | 久久精品国产一区二区三区日韩 | 成人啪啪97丁香 | 羞羞一区二区三区四区片 | 日韩免费高清视频 | 亚洲人成网国产最新在线 | 91亚洲国产成人久久精品网站 | 特一级大黄在线观看 | 国产系列在线播放 | 亚洲精品丝袜在线一区波多野结衣 | 91视频免费网址 | 国产毛片在线看 | 久久夜色tv网站免费影院 | 久久电影精品久久99久久 | 国语自产精品视频在线第 | 四虎永久免费地址ww 41.6 | 久久青青成人亚洲精品 | 精彩视频一区二区三区 | 清除唯美第一区二区三区 | 外国一级黄色 | 免费在线看黄的网站 | 亚洲视频天天射 | 欧美黑人换爱交换乱理伦片 | 亚洲国产日韩在线一区 | 视频偷拍一级视频在线观看 | 国产情侣自拍偷拍 | 俄罗斯一级毛片免费视频 | 热99re久久国超精品首页 | 久草视频福利在线 | 欧美中文日韩 | 日韩精品一区二区三区毛片 |