近期梳理Weblogic数据源,数据源较多,但是每一个数据源在weblogic中是xml方式存在,所以想到批量解析xml,把数据放到数据库后来解决。

需要的数据源信息:

WEBLOGIC_HOST
JDBC_NAME
JNDI_NAME
DB_ALIAS
DB_NAME
DB_HOST
INST_PORT
DB_USER
TARGET
URL
DRIVER_TYPE
CAPACITY

数据源xml格式:

<?xml version='1.0' encoding='UTF-8'?>
<jdbc-data-source>
<name>jdjd</name>
<jdbc-driver-params>
<url>jdbc:db2://10.10.112.166:50000/MYDB</url>
<driver-name>com.ibm.db2.jcc.DB2Driver</driver-name>
<properties>
<property>
<name>user</name>
<value>myuser</value>
</property>
<property>
<name>driverType</name>
<value>4</value>
</property>
<property>
<name>databaseName</name>
<value>MYDB</value>
</property>
</properties>
<password-encrypted>{AES}sdfhjhsafhj=</password-encrypted>
</jdbc-driver-params>
<jdbc-connection-pool-params>
<test-table-name>SQL SELECT COUNT(*) FROM SYSIBM.SYSTABLES</test-table-name>
</jdbc-connection-pool-params>
<jdbc-data-source-params>
<jndi-name>jdjd</jndi-name>
<global-transactions-protocol>OnePhaseCommit</global-transactions-protocol>
</jdbc-data-source-params>
</jdbc-data-source>

解析xml,取所需信息放入mysql数据库:

#!/usr/local/bin/python2.7
# encoding: utf-8
import xml.etree.ElementTree as ET
import mysql.connector as cnn
import os cnx = cnn.connect(host='192.168.2.180',user='root',password='123456',database='jdbc') file_list = os.listdir('C:\Users\Administrator\Desktop\jdbc')
for jdbc_file in file_list:
file_abs = os.path.join('C:\Users\Administrator\Desktop\jdbc',jdbc_file)
print "开始处理:",file_abs
tree = ET.parse(file_abs)
#根节点jdbc-data-source
root = tree.getroot()
#name 查找元素
jdbc_name_tag = root.find('name')
jdbc_name = jdbc_name_tag.text
#print jdbc_name_tag.tag,jdbc_name
#jdbc-data-source-params
jdbc_data_source = root.find('jdbc-data-source-params')
jndi_name_tag = jdbc_data_source.find('jndi-name')
jndi_name = jndi_name_tag.text
#print jndi_name_tag.tag,jndi_name
#jdbc-driver-params
jdbc_driver_tag = root.find('jdbc-driver-params') #db,user
property_tag = jdbc_driver_tag.find('properties').findall('property')
i = 1
for property in property_tag:
if property.find('name').text == 'user':
dbuser = property.find('value').text
elif property.find('name').text == 'databaseName':
dbname = property.find('value').text
elif property.find('name').text == 'driverType':
dbtype = int(property.find('value').text)
#print property.find('name').text,property.find('value').text
#url
url_tag = jdbc_driver_tag.find('url')
url = url_tag.text
#print url_tag.tag,url #max-capacity
max_capacity_tag = root.find('jdbc-connection-pool-params').find('max-capacity')
try:
max_capacity = max_capacity_tag.text
#print max_capacity_tag.tag,max_capacity
except AttributeError:
print "NO tag max_capacity"
max_capacity = '' #cnx = cnn.connect(host='10.10.112.168',user='root',password='123456',database='jdbc')
cursor = cnx.cursor()
state = ("insert into weblogic_jdbc_999 (WEBLOGIC_HOST,JDBC_NAME,JNDI_NAME,DB_ALIAS,DB_USER,URL,CAPACITY) values (%s,%s,%s,%s,%s,%s,%s)")
jdbc_data = ('10.10.112.168',jdbc_name,jndi_name,dbname,dbuser,url,max_capacity)
cursor.execute(state,jdbc_data)
cursor.close()
cnx.commit()
cnx.close()

数据源所属weblogic服务器实例在另外一个xml(config.xml)中,也需要解析,然后更新数据。

import xml.etree.ElementTree as ET
import mysql.connector as cnn
tree = ET.parse('/root/Python_shell/config68.xml')
root = tree.getroot()
list_node = root.findall('jdbc-system-resource')
cnx = cnn.connect(host='127.0.0.1',user='root',password='123456',database='jdbc')
cursor = cnx.cursor()
state = ("update weblogic_jdbc_999 set TARGET=%s where JNDI_NAME=%s")
for i in list_node:
jdbc_name = i.find('name').text
server_target = i.find('target').text
updata = (server_target,jdbc_name)
cursor.execute(state,updata)
cursor.close()
cnx.commit()
cnx.close()

但是出现一个问题:db2连接,一种是直接url连接,一种java利用db2客户端编目后连接:

需要把db2 node和db编目导入数据库:

node取4个值,然后转一行,手动导入数据库:

db2 list node directory | awk NF | egrep -i "Node|Protocol|Hostname|Service" | awk '!/entry|Directory/ {print $NF}' | awk '{printf $0","} NR%4==0 {print "10.10.112.168"}'

WEBLOGIC_HOST
NODE_NAME
COMMENT
DIRECTORY
PROTOCOL
DB_HOST
INST_PORT

db取3个值,然后转一行,手动导入数据库:

db2 list db directory | awk NF | egrep -i 'alias|Database name|Node' | awk '{print $NF}' | awk '{printf $0","} NR%3==0 {print "10.10.112.168"}'

WEBLOGIC_HOST
DB_ALIAS
DB_NAME
NODE_NAME

这样一共三张表:可以按需筛选所需信息。

SELECT
a.WEBLOGIC_HOST,
a.JDBC_NAME,
a.JNDI_NAME,
a.DB_ALIAS,
db.DB_NAME,
nd.DB_HOST,
nd.INST_PORT,
a.DB_USER,
a.TARGET,
a.URL FROM
weblogic_jdbc a
LEFT JOIN db2_catalog_db db ON (
a.WEBLOGIC_HOST = db.WEBLOGIC_HOST
AND a.DB_ALIAS = db.DB_ALIAS
)
LEFT JOIN db2_catalog_node nd ON (
db.WEBLOGIC_HOST = nd.WEBLOGIC_HOST
AND db.NODE_NAME = nd.NODE_NAME
)

更新表信息:

UPDATE weblogic_jdbc,
db2_catalog_db
SET weblogic_jdbc.DB_NAME = db2_catalog_db.DB_NAME
WHERE
weblogic_jdbc.WEBLOGIC_HOST = db2_catalog_db.WEBLOGIC_HOST
AND weblogic_jdbc.DB_ALIAS = db2_catalog_db.DB_ALIAS AND weblogic_jdbc.DB_NAME IS NULL; UPDATE weblogic_jdbc,
db2_catalog_db,
db2_catalog_node
SET weblogic_jdbc.DB_HOST = db2_catalog_node.DB_HOST,
weblogic_jdbc.INST_PORT = db2_catalog_node.INST_PORT
WHERE
weblogic_jdbc.WEBLOGIC_HOST = db2_catalog_db.WEBLOGIC_HOST
AND weblogic_jdbc.DB_ALIAS = db2_catalog_db.DB_ALIAS AND db2_catalog_db.NODE_NAME = db2_catalog_node.NODE_NAME
AND db2_catalog_db.WEBLOGIC_HOST = db2_catalog_node.WEBLOGIC_HOST
AND weblogic_jdbc.DB_HOST IS NULL
AND weblogic_jdbc.INST_PORT IS NULL;

自己写完代码后感觉太烂,一行一行命令堆积起来的,哈哈,先解决问题再说。

python解析XML笔记(etree)的更多相关文章

  1. python解析xml之lxml

    虽然python解析xml的库很多,但是,由于lxml在底层是用C语言实现的,所以lxml在速度上有明显优势.除了速度上的优势,lxml在使用方面,易用性也非常好.这里将以下面的xml数据为例,介绍l ...

  2. python 解析xml

    在工作中很多时候都要用到xml,使用这个时候难免会设计到解析他,然后就研究了一下python解析xml问题,看了很多东西,python有很多解析xml的包,但是也折腾我好一段时间,最后选择了这个方法. ...

  3. Python 解析 XML 文件生成 HTML

    XML文件result.xml,内容如下: <ccm> <metric> <complexity>1</complexity> <unit> ...

  4. 横向对比分析Python解析XML的四种方式

    横向对比分析Python解析XML的四种方式 在最初学习PYTHON的时候,只知道有DOM和SAX两种解析方法,但是其效率都不够理想,由于需要处理的文件数量太大,这两种方式耗时太高无法接受. 在网络搜 ...

  5. python 解析XML python模块xml.dom解析xml实例代码

    分享下python中使用模块xml.dom解析xml文件的实例代码,学习下python解析xml文件的方法. 原文转自:http://www.jbxue.com/article/16587.html ...

  6. python解析xml模块封装代码

    在python中解析xml文件的模块用法,以及对模块封装的方法.原文转自:http://www.jbxue.com/article/16586.html 有如下的xml文件:<?xml vers ...

  7. python解析xml

    python解析xml import xml.dom.minidom as minidom dom = minidom.parse("aa.xml") root = dom.get ...

  8. Python 解析XML实例(xml.sax)

    已知movies.xml <collection shelf="New Arrivals"> <movie title="Enemy Behind&qu ...

  9. PYTHON解析XML的多种方式效率对比实测

    在最初学习PYTHON的时候,只知道有DOM和SAX两种解析方法,但是其效率都不够理想,由于需要处理的文件数量太大,这两种方式耗时太高无法接受. 在网络搜索后发现,目前应用比较广泛,且效率相对较高的E ...

随机推荐

  1. UICollectionView Demo

    1. 利用系统自动布局UICollectionViewFlowLayout进行布局. ViewController1 #import "ViewController1.h" @in ...

  2. 【LeetCode】217. Contains Duplicate (2 solutions)

    Contains Duplicate Given an array of integers, find if the array contains any duplicates. Your funct ...

  3. Linux运维工程师面试-部分题库

    一.Linux操作系统知识 1.常见的Linux发行版本都有什么?你最擅长哪一个?它的官网网站是什么?说明你擅长哪一块?   2.Linux开机启动流程详细步骤是什么?系统安装完,忘记密码如何破解? ...

  4. C# 自定义控件,日期时间选择输入插件

    权声明:本文为博主原创文章,未经博主允许不得转载. // 为textBox1添加一个日期时间选择控件 DateTimeChoser.AddTo(textBox1); DateTimeChoser.De ...

  5. formValidator输入验证、异步验证实例 + licenseImage验证码插件实例应用

    实例技术:springmvc 实现功能:完整用户登录流程.输入信息规则校验.验证码异步校验. 功能清单: 1.springmvc控制器处理get请求(/member/login.html),进行静态页 ...

  6. @property与@synthesize的差别

    上一篇文章我有讲到self.与_的差别,往往和这个问题相伴随的是我困惑的问题是"@property与@synthesize的差别" @property的使用方法 @interfac ...

  7. NTC电阻抑制冷机启动浪涌电流

    开关电源高压直流回路中常用串联负温度系数热敏限流电阻器(NTC)的方法抑制开机浪涌电流,然而这种简单的方法具有很多缺点:如NTC电阻器的限流效果受环境温度影响较大.限流效果在短暂的输入主电网中断(约几 ...

  8. labview程序性能优化

    课时15: 中级08:LabVIEW运行性能(作者:NI应用工程师 李甫成) 一.避免强制类型转换 二.防止内存泄漏 三.将vi的一部分转化为子vi 四轴项目中所占内存对比,变为子vi后执行速度也快了 ...

  9. [转] Java DecimalFormat 用法

    我们经常要将数字进行格式化,比如取2位小数,这是最常见的.Java 提供 DecimalFormat 类,帮你用最快的速度将数字格式化为你需要的样子.下面是一个例子: importjava.text. ...

  10. Java项目多数据源配置 (转)

    由于种种原因,有的时候可能要连接别人的数据库,或者不同的数据库没法自动转换,重构起来数据量又太大了,我们不得不在一个项目中连接多个数据源.从网上找了各种资料,只有这位大神给出的解决方案一下子就成功了. ...