目前在银行研发中心做项目管理工作。我们单位的项目经理从需求、设计、编码到测试以及上线,都要有很大程度的参与。没有工具支持,很多事根本忙不过来、或者没法在有限的时间里保证项目质量。
大概半年前开始接触PYTHON,多多少少写了一些能与项目结合使用的小工具。
从自动化交易接口生成工具,到一些适合我们项目使用的测试工具。
因为项目性质,我手头大部分活儿都是C平台上开发的,我自己也是对C比较熟。 使用PYTHON之后,感觉大好,比起用C实现,一些想法能以快得多的速度用python得以落实或验证,PDMHandler是这些小程序中的一个。
目前此代码托管在GitHub上:
我们常见的使用场景,就是修改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 ...
其它PDM元素的位置不再冗述,请见代码PDMHandler.py
以下是Github中此项目的README.md文件,直接贴一份过来供参考
上一篇:Python socket编程