文章目录

  • 定义文件
  • 配置文件
  • 组件方法
  • 文件解析
  • 数据库写入

pdm文件实际以xml的格式存储

需求场景:需要将pdm的文件解析为数据库中的元数据;

项目结构:

E:.│  common.py
│  main.py
│  tableddl.sql
│
├─conf
│      env_conf.yaml
│
├─pdmDir
│      xxxxxx.pdm
│
└─__pycache__common.cpython-39.pyc

定义文件

  • tableddl.sql 内容
-- Create table
create table T_PARSE_OBJECTS_FROMPDM
(object_name      VARCHAR2(100) not null,object_type      VARCHAR2(50) not null,object_comments  VARCHAR2(1000),object_ddl       CLOB,creationdate     DATE,creator          VARCHAR2(100),modificationdate DATE,modifier         VARCHAR2(100),sc_sj            DATE
);-- Create table
create table T_PARSE_COLUMNS_FROMPDM
(object_name      VARCHAR2(300) not null,column_name      VARCHAR2(4000) not null,column_id        NUMBER,pk_flag          VARCHAR2(30),data_type        VARCHAR2(300),data_length      NUMBER,data_precision   NUMBER,data_scale       NUMBER,nullable         VARCHAR2(30),column_comments  VARCHAR2(1000),creationdate     DATE,creator          VARCHAR2(100),modificationdate DATE,modifier         VARCHAR2(100),sc_sj            DATE
);

配置文件

env_conf.yaml 环境配置内容如下:

# 配置环境信息和输出对象target_db:mainFlag: TruedbType: oraclehost: xx.xx.xx.xxport: 1530dbsid: xxxusername: xxxxpassword: xxxxoutput_object:target_list:name: t_xxx_frompdmstru: [object_name, object_type, object_comments, object_ddl, creationdate, creator, modificationdate, modifier, sc_sj]target_columns:name: t_xxx_frompdmstru: [object_name, column_name, column_id, pk_flag, data_type, data_length, data_precision, data_scale, nullable, column_comments, creationdate, creator, modificationdate, modifier, sc_sj]pdm_info:name: "xxxxxxxx.pdm"

说明:Pdm 文件放到 ./pdmDir/ 下,配置文件放置在 ./conf/ 下;

组件方法

  • cx_Oracle的连接池,实现单个线程的 connection 获取;
  • xml.etree.ElementTree 的 xpath 对象查找;
  • concurrent.futures 的 线程池,实现对象的并行解析和入库;
  • yaml 配置文件解析;

文件解析

main.py 代码如下:

# -*- coding= utf-8 -*-
"""
@DevTool  : PyCharm
@Author   : xxx
@DateTime : 2022/8/2 15:19
@FileName : main.py
"""
import sys
import xml.etree.ElementTree as et
import os.path
import yaml
import time
from datetime import datetime
import threading
from concurrent.futures import ThreadPoolExecutor
from concurrent.futures import as_completed
import common
import cx_Oracleif __name__ == "__main__":conf_path = os.getcwd() + '\conf\env_conf.yaml'with open(conf_path, mode="r", encoding="utf-8") as f:yamlConf = yaml.load(f.read(), Loader=yaml.FullLoader)# 获取目标库环境信息dbType = yamlConf["target_db"]["dbType"]host = yamlConf["target_db"]

Python—pdm解析相关推荐

  1. 了解女友的心还不如了解Python之在Python中解析和修改XML

    2021年12月15日 10:14 ·  阅读 30 摘要: 工作中我们时常需要解析用不同语言编写的数据.Python 提供了许多库来解析或拆分用其他语言编写的数据.在这篇 Python XML 解析 ...

  2. python列表解析的新方法

    python 列表解析我感觉是python非常灵活的一个地方,一开始接触它的时候,特别是之前学过其它的语言, 你会感觉很不习惯,怎么看怎么不对劲,老是觉的哪个地方怪怪的,这就是列表解析的魔力所在. p ...

  3. 如何在Python中解析YAML文件

    如何在Python中解析YAML文件? #1楼 不依赖C标头的最简单,最纯净的方法是PyYaml( 文档 ): #!/usr/bin/env pythonimport yamlwith open(&q ...

  4. python dpkt解析ssl流

    用法:python extract_tls_flow.py -vr  white_pcap/11/2018-01-10_13-05-09_2.pcap  -o pcap_ssl_flow.txt  & ...

  5. 用Python提取解析pdf文档中内容

    用Python提取解析pdf文档中内容 文章目录: 参考: 1.https://blog.csdn.net/tmaczt/article/details/82876018 # Tika库 2.http ...

  6. 【Android 逆向】使用 Python 代码解析 ELF 文件 ( PyCharm 中进行断点调试 | ELFFile 实例对象分析 )

    文章目录 一.PyCharm 中进行断点调试 二.ELFFile 实例对象分析 一.PyCharm 中进行断点调试 在上一篇博客 [Android 逆向]使用 Python 代码解析 ELF 文件 ( ...

  7. 密码算法中iv值是什么_?标检测中的?极?值抑制算法(nms):python代码解析

    ⾮极⼤值抑制(Non-Maximum Suppression)原理 ⾮极⼤值抑制,顾名思义,找出极⼤值,抑制⾮极⼤值.这种思路和算法在各个领域中应⽤⼴泛,⽐如边缘检测算法canny算⼦中就使⽤了该⽅法 ...

  8. python简介pdf_PDFMiner首页、文档和下载 - Python PDF 解析器 - OSCHINA - 中文开源技术交流社区...

    PDFMiner 是一个 Python 的 PDF 解析器,可以从 PDF 文档中提取信息.与其他 PDF 相关的工具不同,它侧重的是获取和分析文本数据.PDFMiner 允许获取某一页中文本的准确位 ...

  9. [Python]ConfigParser解析配置文件

    近期发现非常多接口配置都硬编码在souce file中了,于是就看了下python怎么解析配置文件,重构下这一块. 这个应该是早就要作的... 配置文件: [mysqld] user = mysql ...

  10. python自动解析json_Python语言解析JSON详解

    本文主要向大家介绍了Python语言解析JSON详解,通过具体的内容向大家展示,希望对大家学习Python语言有所帮助. JSON 函数使用 JSON 函数需要导入 json 库:import jso ...

最新文章

  1. python 作用域 前缀_Python面试题:杂项内容
  2. 'Lock wait timeout exceeded; try restarting transaction'问题
  3. struts2 文件上传与下载 (初始文件上传的底层技术)——struts2第七讲
  4. Python:入门(3)
  5. Linux内核如何管理内存
  6. HYSBZ - 1588 营业额统计(Splay)
  7. 建站手册-网站主机:电子商务主机
  8. CANopen | 对象字典OD 03 - 启动CANopen节点的服务数据对象SDO
  9. 某易游戏经典吃豆豆动画404页面源码
  10. Visual studio 2005 恢復默認設置的方法
  11. 利用EA根据sql脚本生成数据库文档
  12. 51nod 1050 循环数组最大子段和 单调队列优化DP
  13. MASM6.11安装
  14. 非负矩阵分解 NMF 总结
  15. Python中切片(Slicing)的运用(:运算符)
  16. Exp8 Web基础 20154328 常城
  17. 基于腾讯云cvm的云原生环境搭建
  18. java打字小游戏_JAVA打字小游戏
  19. GNU Make 使用手册!
  20. 如何评价一个好系统?

热门文章

  1. Jmeter接口测试流程详解
  2. JAXB(Java Architecture for XML Binding)
  3. 分享一个免费内网穿透工具
  4. 不重启Linux修改主机名,以CentOS 7举例
  5. [Java]过滤器(Filter)
  6. 【NLP实践】使用Pytorch进行文本分类——BILSTM+ATTENTION
  7. mysql 1292 错误
  8. Android浅谈网页打开APP(转载)
  9. BIOS无法进入的问题
  10. java使用ssh连接linux服务器执行命令