Django由于數據庫版本原因導致數據庫遷移失敗解決辦法

在django開發中,一般我們初始化一個項目之后,創建應用一般就會生成如下的目錄:

django-admin startproject myproject
python manage.py startapp blog
myproject/
├── manage.py
└── myproject/
|    ├── __init__.py
|    ├── settings.py
|    ├── urls.py
|    └── wsgi.py
|___blog|___models.py|___......

其中model.py就是定義數據庫表的文件。文件中的每個類就是就對應的數據庫中的每張表。

比如models.py里面有如下一個類和對應的數據庫中的關系如下所示:

from django.db import modelsclass BlogPost(models.Model):"""博客文章模型類數據庫中對應的表名為: blog_post (Django 自動將類名轉換為小寫并用下劃線連接)"""title = models.CharField(max_length=200, verbose_name="文章標題")# 數據庫對應: VARCHAR(200) 字段,NOT NULL 約束content = models.TextField(verbose_name="文章內容")# 數據庫對應: TEXT 字段,NOT NULL 約束author = models.ForeignKey('auth.User',on_delete=models.CASCADE,verbose_name="作者")# 數據庫對應: 外鍵字段,關聯到 auth_user 表的 id 字段# 實際存儲為 author_id 整數列created_at = models.DateTimeField(auto_now_add=True, verbose_name="創建時間")# 數據庫對應: DATETIME 字段,NOT NULL# 僅在對象首次創建時自動設置為當前時間updated_at = models.DateTimeField(auto_now=True, verbose_name="更新時間")# 數據庫對應: DATETIME 字段,NOT NULL# 每次保存對象時自動更新為當前時間is_published = models.BooleanField(default=False, verbose_name="是否發布")# 數據庫對應: BOOLEAN/TINYINT(1) 字段,默認值為 0 (False)class Meta:verbose_name = "博客文章"verbose_name_plural = "博客文章"ordering = ['-created_at']# 數據庫對應: 表將按 created_at 降序排列

執行

 python manage.py makemigrations python migrate 

這里執行makemigrations的作用就在在對應的app目錄下面生成migrations目錄,里面會有一些python文件,記錄了對model.py的修改。相當于git可以對models.py的每次修改做checkpoint。 舉個例子。比如我在models.py里面第一次創建了數據庫類,執行了makemigrations命令,這樣就會在對應的migrations目錄下面生成一個pyhton文件,編號從0001_.......py開始記錄這一次的改動。后來我又修改了model.py里面的一些字段的命名。執行了makemigrations命令,這樣就又會生成第二個0002_.......py文件。里面保存了這次對于這些字段修改的checkpoint。同時在django中,這個下面生成的文件名是易讀的,可以從文件名大概知道改動的內容。

第二個執行完makemigrations命令之后,執行migrate就是把生成的哪些編號從0001開始的哪些文件的改動,同步到數據庫中,該建表的建表。該修改字段的修改字段等等。這一步就是對數據庫真正產生影響的步驟。

所以這里在做數據庫遷移的時候,如果遇到遷移失敗,我們是其實可以像git一樣,回退遷移文件到最開始的時候也就是__inti__.py的時候,然后直接重新生成遷移文件,在做遷移

比如上面的代碼執行之后,最后會在數據庫中創建以下結構的表:

1.表名:blog_post2.字段:id (自動創建的主鍵,INTEGER PRIMARY KEY AUTOINCREMENT)title (VARCHAR(200) NOT NULL)content (TEXT NOT NULL)author_id (INTEGER NOT NULL, 外鍵關聯到 auth_user 表)created_at (DATETIME NOT NULL)updated_at (DATETIME NOT NULL)is_published (BOOLEAN/TINYINT(1) NOT NULL, 默認 0)3.外鍵約束:FOREIGN KEY(author_id) REFERENCES auth_user(id) ON DELETE CASCADE

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/915185.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/915185.shtml
英文地址,請注明出處:http://en.pswp.cn/news/915185.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C++STL系列之vector

前言 vector是變長數組,有點像數據結構中的順序表,它和list也是經常被拿出作對比的, vector使用動態分配數組來存儲它的元素。當新元素插入時候,這個數組需要被重新分配大小,如果擴容,因為要開一個新數組把…

Functional C++ for Fun Profit

Lambda Conf上有人講C函數式編程。在Functional Conf 2019上,就有主題為“Lambdas: The Functional Programming Companion of Modern C”的演講。演講者介紹了現代C中函數式編程相關內容,講解了如何使用Lambda表達式編寫符合函數式編程原則的C代碼&…

Python基礎理論與實踐:從零到爬蟲實戰

引言Python如輕舟,載你探尋數據寶藏!本文從基礎理論(變量、循環、函數、模塊)啟航,結合requests和BeautifulSoup實戰爬取Quotes to Scrape,適合零基礎到進階者。文章聚焦Python基礎(變量、循環、…

ThingJS開發從入門到精通:構建三維物聯網可視化應用的完整指南

文章目錄第一部分:ThingJS基礎入門第一章 ThingJS概述與技術架構1.1 ThingJS平臺簡介1.2 技術架構解析1.3 開發環境配置第二章 基礎概念與核心API2.1 核心對象模型2.2 場景創建與管理2.3 對象操作基礎第三章 基礎開發實戰3.1 第一個ThingJS應用3.2 事件系統詳解3.3 …

關于list

1、什么是listlist是一個帶頭結點的雙向循環鏈表模版容器,可以存放任意類型,需要顯式定義2、list的使用有了前面學習string和vector的基礎,學習和使用list會方便很多,因為大部分的內容依然是高度重合的。與順序表不同,…

Mysql 查看當前事務鎖

在 MySQL 中查看事務鎖(鎖等待、鎖持有等),可以使用以下方法: 一、查看當前鎖等待情況(推薦) SELECTr.trx_id AS waiting_trx_id,r.trx_mysql_thread_id AS waiting_thread,r.trx_query AS waiting_query,b…

【Keil5-map文件】

Keil5-map文件■ map文件■ map文件

k8s 基本架構

基于Kubernetes(K8s)的核心設計,以下是其關鍵基本概念的詳細解析。這些概念構成了K8s容器編排系統的基石,用于自動化部署、擴展和管理容器化應用。### 一、K8s核心概念概覽 K8s的核心對象圍繞容器生命周期管理、資源調度和服務發現展開,主要包…

Bell不等式賦能機器學習:微算法科技MLGO一種基于量子糾纏的監督量子分類器訓練算法技術

近年來,量子計算(Quantum Computing) 和 機器學習(Machine Learning) 的融合成為人工智能和計算科學領域的重要研究方向。隨著經典計算機在某些復雜任務上接近計算極限,研究人員開始探索量子計算的獨特優勢…

Edge瀏覽器設置網頁自動翻譯

一.瀏覽網頁自動翻譯設置->擴展->獲取Microsoft Edge擴展->搜索“沉浸式翻譯”->獲取 。提示:如果采用其他的翻譯擴展沒找自動翻譯功能,所以這里選擇“沉浸式翻譯”二.基于Java WebElement時自動翻譯Java關鍵代碼:提示&#xff1…

TCP/UDP協議深度解析(四):TCP的粘包問題以及異常情況處理

🔍 開發者資源導航 🔍🏷? 博客主頁: 個人主頁📚 專欄訂閱: JavaEE全棧專欄 本系列往期內容~ TCP/UDP協議深度解析(一):UDP特性與TCP確認應答以及重傳機制 TCP/UDP協議深…

R 基礎語法

R 基礎語法 R 語言是一種針對統計計算和圖形表示而設計的編程語言,廣泛應用于數據分析、統計學習、生物信息學等領域。本文將為您介紹 R 語言的基礎語法,幫助您快速入門。 1. R 語言環境搭建 在開始學習 R 語言之前,您需要安裝并配置 R 語言環…

語義熵怎么增強LLM自信心的

語義熵怎么增強LLM自信心的 一、傳統Token熵的問題(先理解“痛點”) 比如模型回答“阿司匹林是否治療頭痛?”→ 輸出“是” 傳統Token熵:只看“詞的概率”,比如“是”這個詞的概率特別高(Token熵0.2,數值低說明確定性強 )。 但實際風險:醫學場景里,“是”的字面肯定…

javaweb的幾大常見漏洞

CTF javaweb中幾大常見漏洞(基于java-security靶場) 對于CTF而言,java類型的題目基本都是白盒代碼審計,在java類型的web題目增長的今天,java代碼審計能力在ctf比賽中尤為重要。 這篇博客主要是給大家介紹一下一些常見漏洞在java代碼里面大概是…

【設計模式C#】外觀模式(用于解決客戶端對系統的許多類進行頻繁溝通)

一種結構性設計模式。特點是將復雜的子系統調用邏輯封裝到一個外觀類,從而使客戶端更容易與系統交互。優點:簡化了接口的調用;降低了客戶端與子系統的耦合度;封裝了子系統的邏輯。缺點:引入了額外的類,可能…

【PTA數據結構 | C語言版】二叉堆的快速建堆操作

本專欄持續輸出數據結構題目集,歡迎訂閱。 文章目錄題目代碼題目 請編寫程序,將 n 個順序存儲的數據用快速建堆操作調整為最小堆;最后順次輸出堆中元素以檢驗操作的正確性。 輸入格式: 輸入首先給出一個正整數 c(≤1…

【數據結構初階】--雙向鏈表(二)

🔥個人主頁:草莓熊Lotso 🎬作者簡介:C研發方向學習者 📖個人專欄: 《C語言》 《數據結構與算法》《C語言刷題集》《Leetcode刷題指南》 ??人生格言:生活是默默的堅持,毅力是永久的…

vue-cli 模式下安裝 uni-ui

目錄 easycom 自定義easycom配置的示例 npm安裝 uni-ui 準備 sass 安裝 uni-ui 注意 easycom 傳統vue組件,需要安裝、引用、注冊,三個步驟后才能使用組件。easycom將其精簡為一步。 只要組件路徑符合規范(具體見下)&#…

JavaSE-接口

概念在Java中,接口可以被看成是一種公共規范,是一種引用數據類型。語法1.接口的定義格式與類的定義格式基本相同,將class關鍵字替換為interface關鍵字:public interface IShape {}2.類與接口之間使用implements關鍵字來實現接口&a…

常用類學習

文章目錄字符串相關的類String的特性String對象的創建字符串相關的類String類與其他結構之間的轉換StringBuffer,StringBuilderStringBuffer類的常用方法JDK8之前日期時間APIjava.lang.System類java.util.Date類java.text.SimpleDateFormat類java.util.Calendar類JDK8中新日期時…