欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

數(shù)據(jù)庫的數(shù)據(jù)模型更新方法和系統(tǒng)與流程

文檔序號:11155519閱讀:3999來源:國知局
數(shù)據(jù)庫的數(shù)據(jù)模型更新方法和系統(tǒng)與制造工藝

本發(fā)明涉及數(shù)據(jù)庫技術(shù)領(lǐng)域,特別是涉及一種數(shù)據(jù)庫的數(shù)據(jù)模型更新方法和系統(tǒng)。



背景技術(shù):

ORM(Object-Relation-Mapping,對象關(guān)系映射)框架是采用元數(shù)據(jù)來描述對象一關(guān)系映射細(xì)節(jié),元數(shù)據(jù)一般采用XML格式,并且存放在專門的對象一映射文件中。

現(xiàn)有ORM框架中,如Hibernate可以對數(shù)據(jù)模型的修改進(jìn)行檢測,并自動同步修改數(shù)據(jù)庫結(jié)構(gòu);但由于缺乏回滾和記錄變更的手段,用戶必須手動備份數(shù)據(jù)庫表單,以防升級出錯。

由此,在進(jìn)行數(shù)據(jù)庫遷移、升降級等更新過程中,如果用戶不能及時(shí)備份,則在系統(tǒng)的數(shù)據(jù)模型發(fā)生變化時(shí)就無法記錄數(shù)據(jù)庫的差異和變更記錄,降低了數(shù)據(jù)庫的使用效率。



技術(shù)實(shí)現(xiàn)要素:

基于此,有必要針對上述技術(shù)問題,提供一種數(shù)據(jù)庫的數(shù)據(jù)模型更新方法和系統(tǒng),提高數(shù)據(jù)庫的使用效率。

一種數(shù)據(jù)庫的數(shù)據(jù)模型更新方法,包括:

獲取當(dāng)前數(shù)據(jù)庫的表單數(shù)據(jù),并反向生成對象模型;

讀取新版本數(shù)據(jù)庫的數(shù)據(jù)模型,對比所述對象模型與新版本的數(shù)據(jù)模型的差異,并生成帶版本號的差分腳本;

將所述版本號記錄到預(yù)先創(chuàng)建的數(shù)據(jù)表中;

根據(jù)所述數(shù)據(jù)表記錄的版本號和差分腳本,對數(shù)據(jù)庫的數(shù)據(jù)模型進(jìn)行更新。

一種數(shù)據(jù)庫的數(shù)據(jù)模型更新系統(tǒng),包括:

轉(zhuǎn)換模塊,用于獲取當(dāng)前數(shù)據(jù)庫的表單數(shù)據(jù),并反向生成對象模型;

比對模塊,用于利用數(shù)據(jù)庫工具讀取新版本的數(shù)據(jù)模型,對比所述對象模型與新版本的數(shù)據(jù)模型的差異,并生成帶版本號的差分腳本;

記錄模塊,用于將所述版本號依據(jù)先后順序記錄到預(yù)先創(chuàng)建的數(shù)據(jù)表中;

更新模塊,用于根據(jù)所述數(shù)據(jù)表記錄的版本號和差分腳本,對數(shù)據(jù)庫的數(shù)據(jù)模型進(jìn)行更新。

上述數(shù)據(jù)庫的數(shù)據(jù)模型更新方法和系統(tǒng),將當(dāng)前數(shù)據(jù)庫的表單數(shù)據(jù)反向生成對象模型,將新版本數(shù)據(jù)庫的數(shù)據(jù)模型與對象模型進(jìn)行比對,將模型差異生成帶版本號的差分腳本記錄到預(yù)先創(chuàng)建的數(shù)據(jù)表中,在需要更新時(shí),利用記錄的版本號和差分腳本自動執(zhí)行對數(shù)據(jù)庫的數(shù)據(jù)模型的新。該技術(shù)方案,可以在數(shù)據(jù)模型發(fā)生變化是,記錄數(shù)據(jù)模型的差異和變更記錄,并可以為更新提供便捷的差分腳本,提高數(shù)據(jù)庫的使用效率。

附圖說明

圖1是本發(fā)明實(shí)施例的數(shù)據(jù)庫的數(shù)據(jù)模型更新方法流程圖;

圖2是一個(gè)實(shí)例的生成差分腳本的流程圖;

圖3是本發(fā)明實(shí)施例的數(shù)據(jù)庫的數(shù)據(jù)模型更新系統(tǒng)結(jié)構(gòu)示意圖。

具體實(shí)施方式

下面結(jié)合附圖闡述本發(fā)明的數(shù)據(jù)庫的數(shù)據(jù)模型更新方法和系統(tǒng)的實(shí)施例。

參考圖1所示,圖1是本發(fā)明實(shí)施例的數(shù)據(jù)庫的數(shù)據(jù)模型更新方法流程圖,包括:

S110,獲取當(dāng)前數(shù)據(jù)庫的表單數(shù)據(jù),并反向生成對象模型;

此步驟中,在執(zhí)行數(shù)據(jù)庫的數(shù)據(jù)模型更新時(shí),首先獲取當(dāng)前數(shù)據(jù)庫的表單數(shù)據(jù),根據(jù)原對象模型反向生成數(shù)據(jù)模型,便于對模型之間進(jìn)行代碼比對。

在一個(gè)實(shí)施例中,在反向生成對象模型前,可以使用ORM對象關(guān)系模型建立數(shù)據(jù)庫表單;根據(jù)數(shù)據(jù)庫的連接地址、用戶名和密碼,建立與數(shù)據(jù)庫的連接;

進(jìn)一步的,建立數(shù)據(jù)表,用于記錄數(shù)據(jù)庫的版本號;其中,初始化版本號置為0;創(chuàng)建所述數(shù)據(jù)庫的備份腳本目錄,并生成配置信息。

上述實(shí)施例,通過讀取數(shù)據(jù)庫的配置信息,建立與數(shù)據(jù)庫的連接,然后執(zhí)行數(shù)據(jù)庫的數(shù)據(jù)模型的更新流程。

在一個(gè)實(shí)施例中,S110的反向生成對象模型的步驟,可以包括如下:

調(diào)用數(shù)據(jù)庫引擎驅(qū)動,讀取當(dāng)前數(shù)據(jù)庫的表單數(shù)據(jù),根據(jù)表單數(shù)據(jù)進(jìn)行代碼轉(zhuǎn)換,反向生成對象模型;具體的,獲取所述表單數(shù)據(jù)中的名稱和字段,對所述名稱和字段進(jìn)行排序,將所述名稱和字段轉(zhuǎn)換成代碼。

S120,讀取新版本數(shù)據(jù)庫的數(shù)據(jù)模型,對比所述對象模型與新版本的數(shù)據(jù)模型的差異,并生成帶版本號的差分腳本;

此步驟中,可以利用數(shù)據(jù)庫工具(如sqlalchemy)讀取新版本數(shù)據(jù)庫的數(shù)據(jù)模型,

由于新的數(shù)據(jù)模型位于系統(tǒng)代碼中,可以加載新舊版本的數(shù)據(jù)模型進(jìn)行差異對比。

在一個(gè)實(shí)施例中,生成帶版本號的差分腳本的步驟,可以將所述對象模型和新版本的數(shù)據(jù)模型中的每個(gè)元數(shù)據(jù)進(jìn)行對比;根據(jù)所述元數(shù)據(jù)的字段差異,生成差分腳本及其版本號。

S130,將所述版本號記錄到預(yù)先創(chuàng)建的數(shù)據(jù)表中;

此步驟中,通過在數(shù)據(jù)庫中新增數(shù)據(jù)表,從而實(shí)現(xiàn)對數(shù)據(jù)庫表單變更的版本控制,是對數(shù)據(jù)庫進(jìn)行更新的前提;例如,可以在預(yù)先創(chuàng)建的數(shù)據(jù)表中,在原版本號基礎(chǔ)上將版本號加1。

S140,根據(jù)所述數(shù)據(jù)表記錄的版本號和差分腳本,對數(shù)據(jù)庫的數(shù)據(jù)模型進(jìn)行更新;

此步驟中,利用數(shù)據(jù)表記錄的版本號和差分腳本,可以對數(shù)據(jù)庫模型進(jìn)行更新,例如數(shù)據(jù)庫的升降機(jī)操作,同時(shí)可以確保在更新過程當(dāng)中的差異和變更記錄。

參考圖2所示,圖2是一個(gè)實(shí)例的生成差分腳本的流程圖,首先建立與數(shù)據(jù)庫的連接,然后調(diào)用數(shù)據(jù)庫引擎驅(qū)動器,將數(shù)據(jù)庫變動數(shù)據(jù)反向生成對象模型與新版本的數(shù)據(jù)模型比對后,得到模型的差異,生成數(shù)據(jù)庫腳本,保存為差分腳本。

在一個(gè)實(shí)施例中,所述更新操作為降級操作;對應(yīng)的,所述步驟S140中具體的降級操作可以如下:

讀取所述數(shù)據(jù)表中記錄的最新的版本號;

查找所述最新的版本號的上一個(gè)版本號對應(yīng)的差分腳本;

執(zhí)行所述上一個(gè)版本號中的降級函數(shù),將數(shù)據(jù)庫的數(shù)據(jù)模型降級到上一個(gè)版本;其中,所述降級函數(shù)記錄從數(shù)據(jù)庫表單從新版本到舊版本的操作。

上述實(shí)施例中,通過數(shù)據(jù)表記錄的最新的版本號,在降級的過程中,通過版本號減1后,找到對應(yīng)的差分腳本,運(yùn)行降級函數(shù),即可恢復(fù)到相應(yīng)版本的數(shù)據(jù)模型。

在一個(gè)實(shí)施例中,所述更新操作為升級操作;對應(yīng)的,所述步驟S140中具體的升級操作可以如下:

讀取所述數(shù)據(jù)表中記錄的最新的版本號;

根據(jù)所述最新的版本號查找對應(yīng)的差分腳本;

執(zhí)行所述差分腳本中的升級函數(shù),將數(shù)據(jù)庫的數(shù)據(jù)模型升級到最新版本;其中,所述升級函數(shù)記錄從數(shù)據(jù)庫表單從舊版本到新版本的操作。

上述實(shí)施例中,在進(jìn)行數(shù)據(jù)庫的升級前,將要升級到的版本的數(shù)據(jù)模型與記錄在數(shù)據(jù)表中的最新版本的數(shù)據(jù)模型進(jìn)行差異比對,然后將兩者差異生成差分腳本及其版本號,并將該版本號記錄在數(shù)據(jù)表中,以供后續(xù)進(jìn)行更新時(shí)使用。

本發(fā)明的技術(shù),可以應(yīng)用在軟件開發(fā)過程中,特別是具備ORM的WEB框架中,在數(shù)據(jù)庫的對象模型發(fā)生改變之后,自動對比原數(shù)據(jù)模型和新的數(shù)據(jù)模型,當(dāng)模型不一致時(shí),可以動態(tài)修改數(shù)據(jù)庫字段;在數(shù)據(jù)模型新增字段,不影響原數(shù)據(jù)庫中數(shù)據(jù),僅進(jìn)行新增字段的操作;數(shù)據(jù)庫進(jìn)行升級之前,可以自動把前后數(shù)據(jù)模型的差異記錄為SQL差分腳本并保存;在進(jìn)行升降級時(shí),可分別執(zhí)行升級腳本和降級腳本對數(shù)據(jù)庫結(jié)構(gòu)進(jìn)行覆蓋和修改;另外,數(shù)據(jù)模型和升降級腳本(如Class類和方法)可以使用Python通用庫生成,可任意移植并轉(zhuǎn)化成其他語言的數(shù)據(jù)模型。

綜合上述實(shí)施例的方案,本發(fā)明的數(shù)據(jù)庫的數(shù)據(jù)模型更新方法,具有如下優(yōu)點(diǎn):

(1)設(shè)計(jì)了數(shù)據(jù)庫表單版本控制的方案;通過在數(shù)據(jù)表單中引進(jìn)版本的概念,新增記錄版本號的數(shù)據(jù)表單,表單名可以記為“version”從而實(shí)現(xiàn)對數(shù)據(jù)庫表單變更的版本控制。

(2)通過數(shù)據(jù)庫引擎驅(qū)動器,配置文件指定連接的數(shù)據(jù)庫類型,對于連接不同類型的數(shù)據(jù)庫,可以通過提供不同的參數(shù)類型,例如URL、用戶名或密碼等組合,使用不同的SQL語句;數(shù)據(jù)庫引擎驅(qū)動器采用基于SQLalchemy實(shí)現(xiàn)的一種多數(shù)據(jù)庫支持的庫,使得在工作的時(shí)候,可以跨越不同的數(shù)據(jù)庫系統(tǒng),例如Mysql,Sqlite等。

(3)在進(jìn)行升降級時(shí),反向生成數(shù)據(jù)模型,并與新的數(shù)據(jù)模型進(jìn)行差異對比,自動生成升降級的差分腳本,并將差分腳本名稱以版本號作為標(biāo)識,例如,可以記為“如0001_migrateion.**”以便升降級使用;

借助SQLalchemy庫可以反向生成數(shù)據(jù)模型,差異對比新舊的數(shù)據(jù)模型,生成相應(yīng)的升降級腳本函數(shù)。

參考圖3所示,圖3是本發(fā)明實(shí)施例的數(shù)據(jù)庫的數(shù)據(jù)模型更新系統(tǒng)結(jié)構(gòu)示意圖,主要包括:

轉(zhuǎn)換模塊110,用于獲取當(dāng)前數(shù)據(jù)庫的表單數(shù)據(jù),并反向生成對象模型;

比對模塊120,用于利用數(shù)據(jù)庫工具讀取新版本的數(shù)據(jù)模型,對比所述對象模型與新版本的數(shù)據(jù)模型的差異,并生成帶版本號的差分腳本;

記錄模塊130,用于將所述版本號依據(jù)先后順序記錄到預(yù)先創(chuàng)建的數(shù)據(jù)表中;

更新模塊140,用于根據(jù)所述數(shù)據(jù)表記錄的版本號和差分腳本,對數(shù)據(jù)庫的數(shù)據(jù)模型進(jìn)行更新。

本發(fā)明的數(shù)據(jù)庫的數(shù)據(jù)模型更新系統(tǒng)與本發(fā)明的數(shù)據(jù)庫的數(shù)據(jù)模型更新方法一一對應(yīng),在上述數(shù)據(jù)庫的數(shù)據(jù)模型更新方法的實(shí)施例闡述的技術(shù)特征及其有益效果均適用于數(shù)據(jù)庫的數(shù)據(jù)模型更新系統(tǒng)的實(shí)施例中,特此聲明。

以上所述實(shí)施例的各技術(shù)特征可以進(jìn)行任意的組合,為使描述簡潔,未對上述實(shí)施例中的各個(gè)技術(shù)特征所有可能的組合都進(jìn)行描述,然而,只要這些技術(shù)特征的組合不存在矛盾,都應(yīng)當(dāng)認(rèn)為是本說明書記載的范圍。

以上所述實(shí)施例僅表達(dá)了本發(fā)明的幾種實(shí)施方式,其描述較為具體和詳細(xì),但并不能因此而理解為對發(fā)明專利范圍的限制。應(yīng)當(dāng)指出的是,對于本領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明構(gòu)思的前提下,還可以做出若干變形和改進(jìn),這些都屬于本發(fā)明的保護(hù)范圍。因此,本發(fā)明專利的保護(hù)范圍應(yīng)以所附權(quán)利要求為準(zhǔn)。

當(dāng)前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1
城口县| 比如县| 延津县| 安顺市| 滦平县| 会同县| 仲巴县| 乡城县| 彭水| 高尔夫| 巴塘县| 岫岩| 静乐县| 张家港市| 天台县| 林芝县| 开封县| 乌鲁木齐市| 广平县| 高邑县| 北票市| 金塔县| 延寿县| 呼图壁县| 越西县| 军事| 陆川县| 灵璧县| 仪征市| 海盐县| 海口市| 永德县| 遵义市| 伊宁市| 信阳市| 泾川县| 泗水县| 灌云县| 镇安县| 五家渠市| 望奎县|