您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“django中用makemigrations時提示No changes detected”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學(xué)習(xí)“django中用makemigrations時提示No changes detected”吧!
我們在使用Django創(chuàng)建工程的時候都使用makemigrations、migrate來生成最初的數(shù)據(jù)庫模型,但是到最后都是直接在數(shù)據(jù)庫中手動創(chuàng)建表,為什么呢?因為這些數(shù)據(jù)庫遷移命令經(jīng)常會顯示No changes detected,明明我們已經(jīng)改了數(shù)據(jù)庫模型了,為什么提示沒有變化呢?這里我們就要搞清楚,數(shù)據(jù)庫遷移命令是怎么去識別模型變化的。詳細的源碼分析我這里就不做介紹了,說一下它的流程幫助你理解就可以了。
首先我們要知道,與數(shù)據(jù)庫遷移相關(guān)的東西都有哪些?
models.py中定義的模型
APP下面的migrations目錄
數(shù)據(jù)庫中的django_migrations表
執(zhí)行makemigrations命令的時候,執(zhí)行流程如下:
根據(jù)注冊的APP,獲取所有APP下的migrations目錄,遍歷其下的py文件(不以_~開頭的)
然后根據(jù)文件中的內(nèi)容生成對應(yīng)的數(shù)據(jù)庫表模型
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)),
],
),
]
再根據(jù)models.py文件中的類生成數(shù)據(jù)庫表模型
對比2、3中生成的模型字段,如果有變化就在對應(yīng)APP的migrations目錄下生成新的.py文件
執(zhí)行migrate命令的時候,執(zhí)行流程如下:
根據(jù)注冊的APP,獲取所有APP下的migrations目錄,遍歷其下的py文件(不以_~開頭的)
根據(jù)migrations目錄下的所有遷移文件生成數(shù)據(jù)庫表模型
讀取django_migrations表中的所有記錄,其中記錄的是所有表生成的遷移文件信息
id | app | name | applied |
---|---|---|---|
1 | contenttypes | 0001_initial | 2019-09-08 09:48:47.040754 |
2 | Course | 0001_initial | 2019-09-08 09:52:23.045994 |
檢測表中所記錄的數(shù)據(jù)模型加載的遷移文件與實際migrations目錄下的文件是否相匹配,如果全都加載過,則不執(zhí)行;如果有未加載的,就執(zhí)行數(shù)據(jù)庫命令
通過以上分析得出以下結(jié)論:
app下必須有migrations文件夾,即使是空的(必須有、必須有、必須有)
執(zhí)行遷移時應(yīng)該先執(zhí)行makemigrations,再執(zhí)行migrate(這是一條建議)
如果執(zhí)行命令顯示沒有變化,請對比django_migrations表和migrations目錄下的文件名,是否對應(yīng)的文件以及執(zhí)行過遷移
如果想重新執(zhí)行遷移,例如migrations下有0002_initial.py文件,django_migrations中也包含對應(yīng)記錄,則刪除django_migrations表中對應(yīng)記錄,重新執(zhí)行migrate命令即可
到此,相信大家對“django中用makemigrations時提示No changes detected”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。