用 Python 实现 PowerDesigner 数据模型文件的处理
admin
2023-07-31 01:51:26
0

简述

目前在银行研发中心做项目管理工作。我们单位的项目经理从需求、设计、编码到测试以及上线,都要有很大程度的参与。没有工具支持,很多事根本忙不过来、或者没法在有限的时间里保证项目质量。
大概半年前开始接触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文件结构简析

所有的\”包、表定义、表字段定义、索引、索引字段定义等“全都定义在.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文件,直接贴一份过来供参考

相关内容

热门资讯

500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
python查找阿姆斯特朗数 题目解释 如果一个n位正整数等于其各位数字的n次方之和,则称该数为阿姆斯特朗数。 例如1^3 + 5...
Apache Doris 2.... 亲爱的社区小伙伴们,我们很高兴地向大家宣布,Apache Doris 2.0.0 版本已于...