資料庫的數據模型更新方法和系統與流程
2023-04-29 23:07:11
本發明涉及資料庫技術領域,特別是涉及一種資料庫的數據模型更新方法和系統。
背景技術:
ORM(Object-Relation-Mapping,對象關係映射)框架是採用元數據來描述對象一關係映射細節,元數據一般採用XML格式,並且存放在專門的對象一映射文件中。
現有ORM框架中,如Hibernate可以對數據模型的修改進行檢測,並自動同步修改資料庫結構;但由於缺乏回滾和記錄變更的手段,用戶必須手動備份資料庫表單,以防升級出錯。
由此,在進行資料庫遷移、升降級等更新過程中,如果用戶不能及時備份,則在系統的數據模型發生變化時就無法記錄資料庫的差異和變更記錄,降低了資料庫的使用效率。
技術實現要素:
基於此,有必要針對上述技術問題,提供一種資料庫的數據模型更新方法和系統,提高資料庫的使用效率。
一種資料庫的數據模型更新方法,包括:
獲取當前資料庫的表單數據,並反向生成對象模型;
讀取新版本資料庫的數據模型,對比所述對象模型與新版本的數據模型的差異,並生成帶版本號的差分腳本;
將所述版本號記錄到預先創建的數據表中;
根據所述數據表記錄的版本號和差分腳本,對資料庫的數據模型進行更新。
一種資料庫的數據模型更新系統,包括:
轉換模塊,用於獲取當前資料庫的表單數據,並反向生成對象模型;
比對模塊,用於利用資料庫工具讀取新版本的數據模型,對比所述對象模型與新版本的數據模型的差異,並生成帶版本號的差分腳本;
記錄模塊,用於將所述版本號依據先後順序記錄到預先創建的數據表中;
更新模塊,用於根據所述數據表記錄的版本號和差分腳本,對資料庫的數據模型進行更新。
上述資料庫的數據模型更新方法和系統,將當前資料庫的表單數據反向生成對象模型,將新版本資料庫的數據模型與對象模型進行比對,將模型差異生成帶版本號的差分腳本記錄到預先創建的數據表中,在需要更新時,利用記錄的版本號和差分腳本自動執行對資料庫的數據模型的新。該技術方案,可以在數據模型發生變化是,記錄數據模型的差異和變更記錄,並可以為更新提供便捷的差分腳本,提高資料庫的使用效率。
附圖說明
圖1是本發明實施例的資料庫的數據模型更新方法流程圖;
圖2是一個實例的生成差分腳本的流程圖;
圖3是本發明實施例的資料庫的數據模型更新系統結構示意圖。
具體實施方式
下面結合附圖闡述本發明的資料庫的數據模型更新方法和系統的實施例。
參考圖1所示,圖1是本發明實施例的資料庫的數據模型更新方法流程圖,包括:
S110,獲取當前資料庫的表單數據,並反向生成對象模型;
此步驟中,在執行資料庫的數據模型更新時,首先獲取當前資料庫的表單數據,根據原對象模型反向生成數據模型,便於對模型之間進行代碼比對。
在一個實施例中,在反向生成對象模型前,可以使用ORM對象關係模型建立資料庫表單;根據資料庫的連接地址、用戶名和密碼,建立與資料庫的連接;
進一步的,建立數據表,用於記錄資料庫的版本號;其中,初始化版本號置為0;創建所述資料庫的備份腳本目錄,並生成配置信息。
上述實施例,通過讀取資料庫的配置信息,建立與資料庫的連接,然後執行資料庫的數據模型的更新流程。
在一個實施例中,S110的反向生成對象模型的步驟,可以包括如下:
調用資料庫引擎驅動,讀取當前資料庫的表單數據,根據表單數據進行代碼轉換,反向生成對象模型;具體的,獲取所述表單數據中的名稱和欄位,對所述名稱和欄位進行排序,將所述名稱和欄位轉換成代碼。
S120,讀取新版本資料庫的數據模型,對比所述對象模型與新版本的數據模型的差異,並生成帶版本號的差分腳本;
此步驟中,可以利用資料庫工具(如sqlalchemy)讀取新版本資料庫的數據模型,
由於新的數據模型位於系統代碼中,可以加載新舊版本的數據模型進行差異對比。
在一個實施例中,生成帶版本號的差分腳本的步驟,可以將所述對象模型和新版本的數據模型中的每個元數據進行對比;根據所述元數據的欄位差異,生成差分腳本及其版本號。
S130,將所述版本號記錄到預先創建的數據表中;
此步驟中,通過在資料庫中新增數據表,從而實現對資料庫表單變更的版本控制,是對資料庫進行更新的前提;例如,可以在預先創建的數據表中,在原版本號基礎上將版本號加1。
S140,根據所述數據表記錄的版本號和差分腳本,對資料庫的數據模型進行更新;
此步驟中,利用數據表記錄的版本號和差分腳本,可以對資料庫模型進行更新,例如資料庫的升降機操作,同時可以確保在更新過程當中的差異和變更記錄。
參考圖2所示,圖2是一個實例的生成差分腳本的流程圖,首先建立與資料庫的連接,然後調用資料庫引擎驅動器,將資料庫變動數據反向生成對象模型與新版本的數據模型比對後,得到模型的差異,生成資料庫腳本,保存為差分腳本。
在一個實施例中,所述更新操作為降級操作;對應的,所述步驟S140中具體的降級操作可以如下:
讀取所述數據表中記錄的最新的版本號;
查找所述最新的版本號的上一個版本號對應的差分腳本;
執行所述上一個版本號中的降級函數,將資料庫的數據模型降級到上一個版本;其中,所述降級函數記錄從資料庫表單從新版本到舊版本的操作。
上述實施例中,通過數據表記錄的最新的版本號,在降級的過程中,通過版本號減1後,找到對應的差分腳本,運行降級函數,即可恢復到相應版本的數據模型。
在一個實施例中,所述更新操作為升級操作;對應的,所述步驟S140中具體的升級操作可以如下:
讀取所述數據表中記錄的最新的版本號;
根據所述最新的版本號查找對應的差分腳本;
執行所述差分腳本中的升級函數,將資料庫的數據模型升級到最新版本;其中,所述升級函數記錄從資料庫表單從舊版本到新版本的操作。
上述實施例中,在進行資料庫的升級前,將要升級到的版本的數據模型與記錄在數據表中的最新版本的數據模型進行差異比對,然後將兩者差異生成差分腳本及其版本號,並將該版本號記錄在數據表中,以供後續進行更新時使用。
本發明的技術,可以應用在軟體開發過程中,特別是具備ORM的WEB框架中,在資料庫的對象模型發生改變之後,自動對比原數據模型和新的數據模型,當模型不一致時,可以動態修改資料庫欄位;在數據模型新增欄位,不影響原資料庫中數據,僅進行新增欄位的操作;資料庫進行升級之前,可以自動把前後數據模型的差異記錄為SQL差分腳本並保存;在進行升降級時,可分別執行升級腳本和降級腳本對資料庫結構進行覆蓋和修改;另外,數據模型和升降級腳本(如Class類和方法)可以使用Python通用庫生成,可任意移植並轉化成其他語言的數據模型。
綜合上述實施例的方案,本發明的資料庫的數據模型更新方法,具有如下優點:
(1)設計了資料庫表單版本控制的方案;通過在數據表單中引進版本的概念,新增記錄版本號的數據表單,表單名可以記為「version」從而實現對資料庫表單變更的版本控制。
(2)通過資料庫引擎驅動器,配置文件指定連接的資料庫類型,對於連接不同類型的資料庫,可以通過提供不同的參數類型,例如URL、用戶名或密碼等組合,使用不同的SQL語句;資料庫引擎驅動器採用基於SQLalchemy實現的一種多資料庫支持的庫,使得在工作的時候,可以跨越不同的資料庫系統,例如Mysql,Sqlite等。
(3)在進行升降級時,反向生成數據模型,並與新的數據模型進行差異對比,自動生成升降級的差分腳本,並將差分腳本名稱以版本號作為標識,例如,可以記為「如0001_migrateion.**」以便升降級使用;
藉助SQLalchemy庫可以反向生成數據模型,差異對比新舊的數據模型,生成相應的升降級腳本函數。
參考圖3所示,圖3是本發明實施例的資料庫的數據模型更新系統結構示意圖,主要包括:
轉換模塊110,用於獲取當前資料庫的表單數據,並反向生成對象模型;
比對模塊120,用於利用資料庫工具讀取新版本的數據模型,對比所述對象模型與新版本的數據模型的差異,並生成帶版本號的差分腳本;
記錄模塊130,用於將所述版本號依據先後順序記錄到預先創建的數據表中;
更新模塊140,用於根據所述數據表記錄的版本號和差分腳本,對資料庫的數據模型進行更新。
本發明的資料庫的數據模型更新系統與本發明的資料庫的數據模型更新方法一一對應,在上述資料庫的數據模型更新方法的實施例闡述的技術特徵及其有益效果均適用於資料庫的數據模型更新系統的實施例中,特此聲明。
以上所述實施例的各技術特徵可以進行任意的組合,為使描述簡潔,未對上述實施例中的各個技術特徵所有可能的組合都進行描述,然而,只要這些技術特徵的組合不存在矛盾,都應當認為是本說明書記載的範圍。
以上所述實施例僅表達了本發明的幾種實施方式,其描述較為具體和詳細,但並不能因此而理解為對發明專利範圍的限制。應當指出的是,對於本領域的普通技術人員來說,在不脫離本發明構思的前提下,還可以做出若干變形和改進,這些都屬於本發明的保護範圍。因此,本發明專利的保護範圍應以所附權利要求為準。