一、命令詳解
1、作用于全局
python manage.py makemigrations 表示通知Django即將做什么,并做一個(gè)記錄,實(shí)際上并沒有做
python manage.py migrate ?真正開始創(chuàng)建數(shù)據(jù)庫(kù)
2、作用于app或文件
需要注意的是這兩個(gè)命令默認(rèn)情況下是作用于全局,也就是對(duì)所有最新更改的models或者
migrations下面的遷移文件進(jìn)行對(duì)應(yīng)的操作,如果要想僅僅對(duì)部分app進(jìn)行作用的話 ,則執(zhí)行如下命令:
python manage.py makemigrations appname
通過makemigrations命令文件下多了一個(gè)001_initial的文件
這個(gè)文件里面的內(nèi)容表示我們創(chuàng)建了一個(gè)Project這個(gè)模型類,并且指出這個(gè)類的成員屬性id、name等以及定義,在models.py創(chuàng)建模型類,其中一個(gè)模型類對(duì)應(yīng)的是一張數(shù)據(jù)表,然而這條命令并未真正添加數(shù)據(jù)庫(kù)表
python manage.py migrate appname
?此時(shí)在看數(shù)據(jù)庫(kù),project表已經(jīng)在mysql中創(chuàng)建了
如果要想精確到某一個(gè)遷移文件則可以使用:
python manage.py migrate appname 0001_initial (文件名)
?二、問題解答
由于之前生成過數(shù)據(jù)表,或者修改內(nèi)容之后再次執(zhí)行命令發(fā)現(xiàn)無法生成,例如:
解決方法:
1、刪除001_initial文件
2、刪除django_migrations表中記錄
由于Django自帶的一個(gè)表django_migrations表中已經(jīng)將之前生成的表添加進(jìn)入了,比如
3、重新執(zhí)行上述兩條命令
python manage.py makemigrations appname
python manage.py migrate appname
其他bug:
models.E028:::同一個(gè)表名在多個(gè)Model的db_table中使用
1、在 appname/models.py 文件中 meta 類設(shè)置managed=False
2、運(yùn)行中會(huì)對(duì)managed=true的model進(jìn)行檢測(cè),是否有多個(gè)model使用了同一個(gè)表名。
?文章來源:http://www.zghlxwxcb.cn/news/detail-766044.html
?文章來源地址http://www.zghlxwxcb.cn/news/detail-766044.html
到了這里,關(guān)于【Django】 python manage.py makemigrations & python manage.py migrate命令解答及不能新建表解決方法的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!