91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

Python知識:為什么使用makemigrations提示No changes detected

發布時間:2020-08-07 20:03:06 來源:ITPUB博客 閱讀:249 作者:千鋒Python唐小強 欄目:編程語言

我們在使用Django創建工程的時候都使用makemigrations、migrate來生成最初的數據庫模型,但是到最后都是直接在數據庫中手動創建表,為什么呢?因為這些數據庫遷移命令經常會顯示No changes detected,明明我們已經改了數據庫模型了,為什么提示沒有變化呢?這里我們就要搞清楚,數據庫遷移命令是怎么去識別模型變化的。詳細的源碼分析我這里就不做介紹了,說一下它的流程幫助你理解就可以了。

首先我們要知道,與數據庫遷移相關的東西都有哪些?

  • models.py中定義的模型
  • APP下面的migrations目錄
  • 數據庫中的django_migrations表

makemigrations

執行makemigrations命令的時候,執行流程如下:

  1. 根據注冊的APP,獲取所有APP下的migrations目錄,遍歷其下的py文件(不以_~開頭的)
  2. 然后根據文件中的內容生成對應的數據庫表模型
class Migration(migrations.Migration):
 initial = True
 dependencies = [
 ]
 operations = [
 migrations.CreateModel(
 name='Course',
 fields=[
 ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
 ('title', models.CharField(max_length=64)),
 ],
 ),
 ]

3 . 再根據models.py文件中的類生成數據庫表模型

4 . 對比2、3中生成的模型字段,如果有變化就在對應APP的migrations目錄下生成新的.py文件

migrate

執行migrate命令的時候,執行流程如下:

  1. 根據注冊的APP,獲取所有APP下的migrations目錄,遍歷其下的py文件(不以_~開頭的)
  2. 根據migrations目錄下的所有遷移文件生成數據庫表模型
  3. 讀取django_migrations表中的所有記錄,其中記錄的是所有表生成的遷移文件信息
Python知識:為什么使用makemigrations提示No changes detected

4 . 檢測表中所記錄的數據模型加載的遷移文件與實際migrations目錄下的文件是否相匹配,如果全都加載過,則不執行;如果有未加載的,就執行數據庫命令

結論

通過以上分析得出以下結論:

  • app下必須有migrations文件夾,即使是空的(必須有、必須有、必須有)
  • 執行遷移時應該先執行makemigrations,再執行migrate(這是一條建議)
  • 如果執行命令顯示沒有變化,請對比django_migrations表和migrations目錄下的文件名,是否對應的文件以及執行過遷移
  • 如果想重新執行遷移,例如migrations下有0002_initial.py文件,django_migrations中也包含對應記錄,則刪除django_migrations表中對應記錄,重新執行migrate命令即可

番外:

網上有人提供了一種方式,執行makemigrations --empty appname,強制生成空的數據庫遷移文件,這樣在執行migrate命令的時候,新生成的遷移文件在django_migrations表中沒有記錄,就不會顯示No changes detected。但是這個空文件中什么都沒做,所以你在models.py中作出的修改并沒有生效。

向AI問一下細節

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

AI

通江县| 德阳市| 湖南省| 普兰店市| 溧阳市| 深圳市| 平顶山市| 鱼台县| 贵州省| 西青区| 桂东县| 二连浩特市| 江油市| 麻阳| 卢湾区| 万州区| 四子王旗| 湘潭县| 辰溪县| 尉犁县| 公主岭市| 监利县| 南京市| 东辽县| 沧州市| 富锦市| 承德市| 玛曲县| 揭西县| 调兵山市| 娱乐| 五华县| 桦甸市| 醴陵市| 襄垣县| 锦屏县| 荆门市| 屯门区| 梁山县| 隆安县| 永平县|