摘要:簡述目前在銀行研發中心做項目管理工作。實現的可以解決這個過程中的生成與數據庫實例的比對在環境下查看數據字典等功能。只需要突破一個關鍵點的模型文件文件實際上是一個標準的數據文件沒想到吧一但了解了這一點,實現對文件的解析就變成了對文件的處理。
簡述
目前在銀行研發中心做項目管理工作。我們單位的項目經理從需求、設計、編碼到測試以及上線,都要有很大程度的參與。沒有工具支持,很多事根本忙不過來、或者沒法在有限的時間里保證項目質量。
大概半年前開始接觸PYTHON,多多少少寫了一些能與項目結合使用的小工具。
從自動化交易接口生成工具,到一些適合我們項目使用的測試工具。
因為項目性質,我手頭大部分活兒都是C平臺上開發的,我自己也是對C比較熟。 使用PYTHON之后,感覺大好,比起用C實現,一些想法能以快得多的速度用python得以落實或驗證,PDMHandler是這些小程序中的一個。
目前此代碼托管在GitHub上:
項目主頁:https://github.com/petjiang/PDMHandler
源碼地址:git@github.com:petjiang/PDMHandler.git
編寫背景我們項目常用PowerDesigner做項目的數據建模管理。
銀行對運行中的系統管理是比較嚴格的,若部署產生問題,可能波及到客戶關系、輿情、賬務等,風險不小,所以對項目組的要求也十分嚴苛。
銀行系統由于可靠性要求高,所以技術上不會用到最前延的。但業務需求通常較為復雜、而且變化快,數據模型變化相應也就頻繁。
目的我們常見的使用場景,就是修改PowerDesigner模型文件(.pdm),轉成SQL,在開發環境上變更數據庫實例、業務代碼開發。
大量并發需求來時,pdm常被改亂,時間一長pdm與數據庫實例的一致性就不能得到保證了。一些較大型的系統幾百上千張表,靠人工核對一致性是很苦的體力活兒。
PDMHandler實現的API可以解決這個過程中的SQL生成、PDM與數據庫實例的比對、在unix環境下查看pdm數據字典等功能。
實現原理其實,實現原理還是比較簡單的。
只需要突破一個關鍵點:PowerDesigner的模型文件(.pdm文件)實際上是一個標準的XML數據文件
沒想到吧?:)
一但了解了這一點,實現對.pdm文件的解析就變成了對xml文件的處理。
剩下的事就是:
(1)選用合適的python的xml庫 (注:PDMHandler采用了xml.dom.minidom)
(2)分析.pdm文件的詳細結構
(3)定義PDMHandler工具類的API接口,實現對.pdm的操作、解析
所有的"包、表定義、表字段定義、索引、索引字段定義等“全都定義在.pdm文件的這個路徑下(以類文件系統路徑方式表示):
shell/Model/o:RootObject/c:Children/o:Model
比如(包 - o:Package)定義:
注意:包定義是可嵌套的,/c:Packages/o:Package可反復嵌套;另外o:Model本身也可以看作一個包
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元素的位置不再冗述,請見代碼PDMHandler.py
以下是Github中此項目的README.md文件,直接貼一份過來供參考 :)
歡迎fork/clone此項目,提出建議
項目主頁: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..)
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/37522.html
摘要:簡述目前在銀行研發中心做項目管理工作。實現的可以解決這個過程中的生成與數據庫實例的比對在環境下查看數據字典等功能。只需要突破一個關鍵點的模型文件文件實際上是一個標準的數據文件沒想到吧一但了解了這一點,實現對文件的解析就變成了對文件的處理。 簡述 目前在銀行研發中心做項目管理工作。我們單位的項目經理從需求、設計、編碼到測試以及上線,都要有很大程度的參與。沒有工具支持,很多事根本忙不過來...
摘要:數據模型轉換成數據庫根據設計生成數據庫腳本,設置腳本存放路徑和名稱,選擇,選擇配置好的數據源,下可以選擇將哪些數據模型轉換成表有數據的表的數據模型可以去掉勾,然后點擊確定如果不是第一次執行該操作,會出現是否覆蓋的選項,選擇是就可以了這里會 數據模型轉換成數據庫 根據 DB 設計生成數據庫腳本,Database-Generate Database...;showImg(https://...
摘要:平日學習接觸過的網站積累,以每月的形式發布。年以前看這個網址概況在線地址前端開發群月報提交原則技術文章新的為主。 平日學習接觸過的網站積累,以每月的形式發布。2017年以前看這個網址:http://www.kancloud.cn/jsfron... 概況 在線地址:http://www.kancloud.cn/jsfront/month/82796 JS前端開發群月報 提交原則: 技...
閱讀 2404·2021-11-24 09:39
閱讀 3223·2021-10-09 09:53
閱讀 1130·2021-09-22 16:06
閱讀 4442·2021-09-02 10:18
閱讀 800·2021-08-23 09:42
閱讀 1761·2021-08-17 10:11
閱讀 2685·2019-08-30 13:02
閱讀 2121·2019-08-30 12:49