本發(fā)明屬于接口工具領(lǐng)域,尤其是涉及一種gbase8a使用python?orm框架的方法。
背景技術(shù):
1、gbase8a數(shù)據(jù)庫是天津南大通用數(shù)據(jù)技術(shù)股份有限公司(簡稱“南大通用”)自主研發(fā)的一款面向大數(shù)據(jù)分析場景的高性能分布式分析型數(shù)據(jù)庫,基于列式存儲和mpp(大規(guī)模并行處理)架構(gòu)設(shè)計(jì),廣泛應(yīng)用于政府、金融、電信、能源等領(lǐng)域的海量數(shù)據(jù)實(shí)時分析場景。
2、python?orm(object-relational?mapping)框架是一種通過對象模型與數(shù)據(jù)庫表結(jié)構(gòu)映射的技術(shù),開發(fā)者可通過操作python類和方法間接管理數(shù)據(jù)庫,無需直接編寫sql。
3、對于python?orm框架來說,隱藏?cái)?shù)據(jù)訪問的細(xì)節(jié),將數(shù)據(jù)庫操作與業(yè)務(wù)邏輯分離,減少開發(fā)的工作量。python?orm框架通??芍С侄喾N數(shù)據(jù)庫,開發(fā)人員可在不同的數(shù)據(jù)庫之間切換,而無需修改代碼。在python社區(qū)中通用的python?orm框架sqlalchemy應(yīng)用廣泛,且支持web框架flask以及bi工具superset。隨著gbase8a數(shù)據(jù)庫市場的不斷拓展,越來越多的開發(fā)者需要在gbase8a中借助superset進(jìn)行數(shù)據(jù)分析或者將部分web項(xiàng)目的數(shù)據(jù)庫遷移到gbase8a,以上操作離不開orm框架的支持,因此,根據(jù)現(xiàn)今gbase8a使用需求,結(jié)合pythonorm框架支持多種數(shù)據(jù)庫的特性是基于為不同的數(shù)據(jù)庫制定相應(yīng)的方言包,所以針對gbase8a的特性,開發(fā)適配sqlalchemy框架和django?orm框架的方言包。
技術(shù)實(shí)現(xiàn)思路
1、有鑒于此,本發(fā)明旨在提出一種gbase8a使用python?orm框架的方法,以解決開發(fā)者在使用python?orm框架操作gbase8a數(shù)據(jù)庫時不得不進(jìn)行復(fù)雜適配操作的問題。
2、為達(dá)到上述目的,本發(fā)明的技術(shù)方案是這樣實(shí)現(xiàn)的:
3、一種gbase8a使用python?orm框架的方法,包括以下步驟:
4、s1、創(chuàng)建python?orm框架與gbase8a數(shù)據(jù)庫的連接器;
5、s2、通過步驟s1中構(gòu)造的連接器,將gbase8a數(shù)據(jù)庫的schema結(jié)構(gòu)映射為python類;
6、s3、利用python類與gbase8a數(shù)據(jù)庫的schema的映射關(guān)系,通過方言包將pythonorm框架的數(shù)據(jù)庫操作轉(zhuǎn)化為gbase8a數(shù)據(jù)庫的sql語言,然后處理執(zhí)行結(jié)果并返回;
7、在步驟s2中,將gbase8a數(shù)據(jù)庫的schema結(jié)構(gòu)映射為python類,包括:
8、s21、創(chuàng)建基類;
9、s22、定義模型類;
10、s23、同步元數(shù)據(jù)到數(shù)據(jù)庫;
11、在步驟s3中,通過方言包將python?orm框架的數(shù)據(jù)庫操作轉(zhuǎn)化為gbase8a數(shù)據(jù)庫的sql語言,包括:
12、s31、方言包的協(xié)調(diào)器協(xié)調(diào)編譯器的類型轉(zhuǎn)換、執(zhí)行器的執(zhí)行策略以及連接器連接驅(qū)動的參數(shù)信息配置工作;
13、s32、方言包的編譯器將指定python?orm框架的數(shù)據(jù)庫操作轉(zhuǎn)化為gbase8a數(shù)據(jù)庫的sql語言;
14、s33、方言包的執(zhí)行器調(diào)用連接器,將生成的sql語言通過數(shù)據(jù)庫連接發(fā)送到gbase8a數(shù)據(jù)庫,并將處理結(jié)果返回到編譯器,然后根據(jù)模型類和數(shù)據(jù)庫表的映射關(guān)系將返回結(jié)果轉(zhuǎn)換為python對象;
15、s34、方言包的連接器通過調(diào)用gbase8a數(shù)據(jù)庫的python驅(qū)動創(chuàng)建數(shù)據(jù)庫連接,并維護(hù)數(shù)據(jù)庫連接;
16、在步驟s32中,將指定python?orm框架的數(shù)據(jù)庫操作轉(zhuǎn)化為gbase8a數(shù)據(jù)庫的sql語言,包括:
17、s321、orm層轉(zhuǎn)換;
18、s322、core層標(biāo)準(zhǔn)化;
19、s323、方言層編譯。
20、進(jìn)一步的,在步驟s1中,包括:
21、s11、根據(jù)python?orm框架的語法格式,構(gòu)造連接gbase8a數(shù)據(jù)庫的url;
22、s12、在python?orm框架中,以構(gòu)造的url作為參數(shù),調(diào)用gbase8a數(shù)據(jù)庫的python驅(qū)動,創(chuàng)建數(shù)據(jù)庫連接,并將其保存在python?orm框架的連接池中。
23、進(jìn)一步的,在步驟s21中,包括:
24、如果python?orm框架為sqlalchemy框架,則使用base?=?declarative_base()創(chuàng)建基類,如果python?orm框架為django框架,則新建一個app,然后在新模塊下的model中定義表結(jié)構(gòu)。
25、進(jìn)一步的,在步驟s22中,定義模型類,包括:
26、如果python?orm框架為sqlalchemy框架,則使用步驟s21中創(chuàng)建的基類作為表結(jié)構(gòu)對應(yīng)python類的父類,如果python?orm框架為django框架,則使用models.model作為表結(jié)構(gòu)對應(yīng)python類的父類。
27、進(jìn)一步的,在步驟s23中,同步元數(shù)據(jù)到數(shù)據(jù)庫,包括:
28、s231、如果python?orm框架為sqlalchemy框架,則使用base.metadata.create_all同步元數(shù)據(jù),如果python?orm框架為django框架,則使用migrate命令同步元數(shù)據(jù);
29、s232、數(shù)據(jù)類型映射,根據(jù)映射關(guān)系重寫方言包對python?orm框架各個字段的實(shí)現(xiàn)方法,將其跟gbase8a數(shù)據(jù)庫中的字段類型進(jìn)行一一對應(yīng)。
30、進(jìn)一步的,在步驟s321中,orm層轉(zhuǎn)換,包括:
31、定義模型,構(gòu)建查詢:通過python?orm框架語法構(gòu)建查詢對象,將對象操作轉(zhuǎn)換為core層的抽象語法樹。
32、進(jìn)一步的,在步驟s322中,core層標(biāo)準(zhǔn)化,包括:
33、s3221、將orm層查詢生成的抽象語法樹轉(zhuǎn)換為標(biāo)準(zhǔn)化的表達(dá)式樹結(jié)構(gòu);
34、s3222、處理基礎(chǔ)sql邏輯,將模型類映射到數(shù)據(jù)庫表和列,生成片段化sql。
35、進(jìn)一步的,在步驟s323中,方言層編譯,包括:
36、s3231、根據(jù)gbase8a數(shù)據(jù)庫的sql語法特性,組裝生成的sql片段;
37、s3232、將python?orm框架的param參數(shù)信息轉(zhuǎn)換為gbase8a數(shù)據(jù)庫的字符串格式占位符;
38、s3233、根據(jù)模型類和數(shù)據(jù)庫表的映射關(guān)系進(jìn)行數(shù)據(jù)類型的轉(zhuǎn)換。
39、相對于現(xiàn)有技術(shù),本發(fā)明所述的一種gbase8a使用python?orm框架的方法具有以下有益效果:
40、本發(fā)明提供一個gbase8a數(shù)據(jù)庫方言包,滿足python?orm框架語法與gbase8a數(shù)據(jù)庫的sql語法的相互轉(zhuǎn)換以及數(shù)據(jù)類型之間的映射關(guān)系,并且以“包”的形式,嵌入當(dāng)前開發(fā)環(huán)境的框架中,具體有益效果如下所述:
41、(1)滿足開發(fā)者可通過python語言使用orm語法操作gbase8a數(shù)據(jù)庫;
42、(2)通過該方法可以使gbase8a完全支持flask框架,并滿足flask框架中的orm語法;
43、(3)支持可視化工具框架superset使用gbase8a作為數(shù)據(jù)集資源庫;
44、(4)可在django框架中使用orm語法操作gbase8a數(shù)據(jù)庫;
45、(5)python開發(fā)者可在社區(qū)主流框架中使用gbase8a數(shù)據(jù)庫,提高python開發(fā)者在使用gbase8a數(shù)據(jù)庫時的操作效率;
46、(6)結(jié)合sqlalchemy框架,用戶可在開發(fā)腳本中無感切換數(shù)據(jù)庫,從而減少用戶遷移數(shù)據(jù)庫時應(yīng)用的修改成本;
47、(7)無需修改框架結(jié)構(gòu),直接以方言包的形式嵌入到框架中,從而降低使用成本。