摘要:簡(jiǎn)述目前在銀行研發(fā)中心做項(xiàng)目管理工作。實(shí)現(xiàn)的可以解決這個(gè)過程中的生成與數(shù)據(jù)庫(kù)實(shí)例的比對(duì)在環(huán)境下查看數(shù)據(jù)字典等功能。只需要突破一個(gè)關(guān)鍵點(diǎn)的模型文件文件實(shí)際上是一個(gè)標(biāo)準(zhǔn)的數(shù)據(jù)文件沒想到吧一但了解了這一點(diǎn),實(shí)現(xiàn)對(duì)文件的解析就變成了對(duì)文件的處理。
簡(jiǎn)述
目前在銀行研發(fā)中心做項(xiàng)目管理工作。我們單位的項(xiàng)目經(jīng)理從需求、設(shè)計(jì)、編碼到測(cè)試以及上線,都要有很大程度的參與。沒有工具支持,很多事根本忙不過來、或者沒法在有限的時(shí)間里保證項(xiàng)目質(zhì)量。
大概半年前開始接觸PYTHON,多多少少寫了一些能與項(xiàng)目結(jié)合使用的小工具。
從自動(dòng)化交易接口生成工具,到一些適合我們項(xiàng)目使用的測(cè)試工具。
因?yàn)轫?xiàng)目性質(zhì),我手頭大部分活兒都是C平臺(tái)上開發(fā)的,我自己也是對(duì)C比較熟。 使用PYTHON之后,感覺大好,比起用C實(shí)現(xiàn),一些想法能以快得多的速度用python得以落實(shí)或驗(yàn)證,PDMHandler是這些小程序中的一個(gè)。
目前此代碼托管在GitHub上:
項(xiàng)目主頁(yè):https://github.com/petjiang/PDMHandler
源碼地址:git@github.com:petjiang/PDMHandler.git
編寫背景我們項(xiàng)目常用PowerDesigner做項(xiàng)目的數(shù)據(jù)建模管理。
銀行對(duì)運(yùn)行中的系統(tǒng)管理是比較嚴(yán)格的,若部署產(chǎn)生問題,可能波及到客戶關(guān)系、輿情、賬務(wù)等,風(fēng)險(xiǎn)不小,所以對(duì)項(xiàng)目組的要求也十分嚴(yán)苛。
銀行系統(tǒng)由于可靠性要求高,所以技術(shù)上不會(huì)用到最前延的。但業(yè)務(wù)需求通常較為復(fù)雜、而且變化快,數(shù)據(jù)模型變化相應(yīng)也就頻繁。
目的我們常見的使用場(chǎng)景,就是修改PowerDesigner模型文件(.pdm),轉(zhuǎn)成SQL,在開發(fā)環(huán)境上變更數(shù)據(jù)庫(kù)實(shí)例、業(yè)務(wù)代碼開發(fā)。
大量并發(fā)需求來時(shí),pdm常被改亂,時(shí)間一長(zhǎng)pdm與數(shù)據(jù)庫(kù)實(shí)例的一致性就不能得到保證了。一些較大型的系統(tǒng)幾百上千張表,靠人工核對(duì)一致性是很苦的體力活兒。
PDMHandler實(shí)現(xiàn)的API可以解決這個(gè)過程中的SQL生成、PDM與數(shù)據(jù)庫(kù)實(shí)例的比對(duì)、在unix環(huán)境下查看pdm數(shù)據(jù)字典等功能。
實(shí)現(xiàn)原理其實(shí),實(shí)現(xiàn)原理還是比較簡(jiǎn)單的。
只需要突破一個(gè)關(guān)鍵點(diǎn):PowerDesigner的模型文件(.pdm文件)實(shí)際上是一個(gè)標(biāo)準(zhǔn)的XML數(shù)據(jù)文件
沒想到吧?:)
一但了解了這一點(diǎn),實(shí)現(xiàn)對(duì).pdm文件的解析就變成了對(duì)xml文件的處理。
剩下的事就是:
(1)選用合適的python的xml庫(kù) (注:PDMHandler采用了xml.dom.minidom)
(2)分析.pdm文件的詳細(xì)結(jié)構(gòu)
(3)定義PDMHandler工具類的API接口,實(shí)現(xiàn)對(duì).pdm的操作、解析
所有的"包、表定義、表字段定義、索引、索引字段定義等“全都定義在.pdm文件的這個(gè)路徑下(以類文件系統(tǒng)路徑方式表示):
shell/Model/o:RootObject/c:Children/o:Model
比如(包 - o:Package)定義:
注意:包定義是可嵌套的,/c:Packages/o:Package可反復(fù)嵌套;另外o:Model本身也可以看作一個(gè)包
shell/Model/o:RootObject/c:Children/o:Model/c:Packages/o:Package ...
再如(表 - o:Table)定義:
shell/Model/o:RootObject/c:Children/o:Model/c:Packages/o:Package/c:Tables/o:Table ...
PDMHandler其它PDM元素的位置不再冗述,請(qǐng)見代碼PDMHandler.py
以下是Github中此項(xiàng)目的README.md文件,直接貼一份過來供參考 :)
歡迎fork/clone此項(xiàng)目,提出建議
項(xiàng)目主頁(yè):https://github.com/petjiang/PDMHandler
源碼地址:git@github.com:petjiang/PDMHandler.git
A tool class to handle sybase PowerDesigner datafile(.pdm).
Currently, it is able to handle PhysicalDiagram in .pdm.
The class implementation of PDMHandler.
use following command to see help docs (sorry that I type it in Chinese):
shell$ echo "import PDMHandler; help(PDMHandler);"|pythonTEST PDM files
PowerDesigner model file (.pdm) is prepared in [repodir]/src/testpdm
use these as input argument for testing the example1.py
* NOTICE: (.pdm) files come from PowerDesigner15 directory [SybasePowerDesigner 15Examples]
It is a usecase of PDMHandler class, read it as a reference code.
example1.py shows 5 levels of pdm file -- Package/Table/Column/Index/IndexColumn
each level has their own attributes which are defined in PDMHandler class :
pythonPKG_ATTR_LIST=["Name","Code","CreationDate","Creator","ModificationDate","Modifier"] TBL_ATTR_LIST=["Name","Code","CreationDate","Creator","ModificationDate","Modifier", "PhysicalOptions"] COL_ATTR_LIST=["Name","Code","CreationDate","Creator","ModificationDate","Modifier", "DataType","Length","Column.Mandatory","Comment"] IDX_ATTR_LIST=["Name","Code","CreationDate","Creator","ModificationDate","Modifier", "PhysicalOptions","Unique"] IDXCOL_ATTR_LIST=["CreationDate","Creator","ModificationDate","Modifier"]
By running :
shell$ python example1.py testpdm/Consol.pdm
shows the output to standout :
shell P: Duplicated Database DUPLICATED_DATABASE lpommier T: Duplicated Account DUPLICATED_ACCOUNT vaudino T-PATH: /Model/o:RootObject/c:Children/o:Model/c:Tables/o:Table C: Email EMAIL char(256) 256 1 C: Name NAME char(256) 256 C: URL URL char(256) 256 I: ACCOUNT_PK ACCOUNT_PK 1 IC: EMAIL T: Duplicated Auteurs DUPLICATED_AUTEURS vaudino T-PATH: /Model/o:RootObject/c:Children/o:Model/c:Tables/o:Table C: Email EMAIL char(256) 256 1 C: Title TITLE char(256) 256 1 I: AUTEURS_PK AUTEURS_PK 1 IC: EMAIL IC: TITLE I: Publication_FK PUBLICATION_FK IC: EMAIL I: Authors_FK AUTHORS_FK IC: TITLE T: Duplicated Publication DUPLICATED_PUBLICATION vaudino T-PATH: /Model/o:RootObject/c:Children/o:Model/c:Tables/o:Table C: Title TITLE char(256) 256 1 C: Email EMAIL char(256) 256 1 C: Pub_Title PUB_TITLE char(256) 256 C: Summary SUMMARY long varchar C: Keywords KEYWORDS char(256) 256 I: PUBLICATION_PK PUBLICATION_PK 1 IC: TITLE I: PUBLISHER_FK PUBLISHER_FK IC: EMAIL I: REFERENCES_FK REFERENCES_FK IC: PUB_TITLEWhy I write it ?
Yes,it is just a tiny code for fun.
But I hope more features will be added in it, and it will be useful to solve some headachy problem. Just like :
compare the online database instance with PDM file.
autogen SQL schema from PDM file (PowerDesigner"s auto-gen setting sucks)
autogen ORM fro PDM file (seems awesome?!,support embed c,SQLAlchemy..)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/110326.html
摘要:簡(jiǎn)述目前在銀行研發(fā)中心做項(xiàng)目管理工作。實(shí)現(xiàn)的可以解決這個(gè)過程中的生成與數(shù)據(jù)庫(kù)實(shí)例的比對(duì)在環(huán)境下查看數(shù)據(jù)字典等功能。只需要突破一個(gè)關(guān)鍵點(diǎn)的模型文件文件實(shí)際上是一個(gè)標(biāo)準(zhǔn)的數(shù)據(jù)文件沒想到吧一但了解了這一點(diǎn),實(shí)現(xiàn)對(duì)文件的解析就變成了對(duì)文件的處理。 簡(jiǎn)述 目前在銀行研發(fā)中心做項(xiàng)目管理工作。我們單位的項(xiàng)目經(jīng)理從需求、設(shè)計(jì)、編碼到測(cè)試以及上線,都要有很大程度的參與。沒有工具支持,很多事根本忙不過來...
摘要:數(shù)據(jù)模型轉(zhuǎn)換成數(shù)據(jù)庫(kù)根據(jù)設(shè)計(jì)生成數(shù)據(jù)庫(kù)腳本,設(shè)置腳本存放路徑和名稱,選擇,選擇配置好的數(shù)據(jù)源,下可以選擇將哪些數(shù)據(jù)模型轉(zhuǎn)換成表有數(shù)據(jù)的表的數(shù)據(jù)模型可以去掉勾,然后點(diǎn)擊確定如果不是第一次執(zhí)行該操作,會(huì)出現(xiàn)是否覆蓋的選項(xiàng),選擇是就可以了這里會(huì) 數(shù)據(jù)模型轉(zhuǎn)換成數(shù)據(jù)庫(kù) 根據(jù) DB 設(shè)計(jì)生成數(shù)據(jù)庫(kù)腳本,Database-Generate Database...;showImg(https://...
摘要:平日學(xué)習(xí)接觸過的網(wǎng)站積累,以每月的形式發(fā)布。年以前看這個(gè)網(wǎng)址概況在線地址前端開發(fā)群月報(bào)提交原則技術(shù)文章新的為主。 平日學(xué)習(xí)接觸過的網(wǎng)站積累,以每月的形式發(fā)布。2017年以前看這個(gè)網(wǎng)址:http://www.kancloud.cn/jsfron... 概況 在線地址:http://www.kancloud.cn/jsfront/month/82796 JS前端開發(fā)群月報(bào) 提交原則: 技...
閱讀 2133·2023-04-26 03:06
閱讀 3580·2023-04-26 01:51
閱讀 2086·2021-11-24 09:38
閱讀 2452·2021-11-17 17:00
閱讀 2324·2021-09-28 09:36
閱讀 942·2021-09-24 09:47
閱讀 2587·2019-08-30 15:54
閱讀 1554·2019-08-30 15:44