利用python实现xml与数据库读取转换的方法

利用python实现xml与数据库读取转换的方法,第1张

概述前言xml课的第三第四个作业都是用java编程来实现xmldom的一些转换,因为自己没怎么学过java,因此和老师说了下想用python来实现第三第四个作业,下面就直接贴代码了

前言

xml课的第三第四个作业都是用java编程来实现xml dom的一些转换,因为自己没怎么学过java,因此和老师说了下想用python来实现第三第四个作业,下面就直接贴代码了

xml文档

<?xml version="1.0" enCoding="UTF-8"?><?xml-stylesheet type="text/xsl" href="1.xslt" rel="external nofollow" ?><!DOCTYPE sys_info [ <!ELEMENT sys_info (info+)> <!ELEMENT info (sysDescr,sysUpTime,sysContact,sysname)> <!ELEMENT sysDescr (#PcdaTA)> <!ELEMENT sysUpTime (#PcdaTA)> <!ELEMENT sysContact (#PcdaTA)> <!ELEMENT sysname (#PcdaTA)> <!ATTList info ip cdaTA #required>]> <sys_info xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:nonamespaceSchemaLocation="1.xsd"> <info ip="192.168.1.1">  <sysDescr>X86-windows2000</sysDescr>  <sysUpTime>9 hours 42 minutes</sysUpTime>  <sysContact>zhangsan</sysContact>  <sysname>computerZhang</sysname>  </info> <info ip="192.168.1.3">  <sysDescr>router</sysDescr>  <sysUpTime>24 hours</sysUpTime>  <sysContact>ruijIE</sysContact>  <sysname>Router2</sysname> </info> <info ip="192.168.2.1">  <sysDescr>router</sysDescr>  <sysUpTime>89 hours</sysUpTime>  <sysContact>Cisco</sysContact>  <sysname>Router3</sysname> </info></sys_info>

解析xml文档用的是python自带的xml库ElementTree,读取MysqL可以安装MysqLdb模块

apt-get install python-MysqLdb

程序运行如下

root@lj /h/s/x/3# python 21.py -husage: 21.py [-h] status positional arguments: status  0clar,1read,2insert

读取xml保存到数据库

root@lj /h/s/x/3# python 21.py 2插入语句: insert into info values ('192.168.1.1','X86-windows2000','9 hours 42 minutes','zhangsan','computerZhang')插入语句: insert into info values ('192.168.1.3','router','24 hours','ruijIE','Router2')插入语句: insert into info values ('192.168.2.1','89 hours','Cisco','Router3')insert success!!!

读取数据库保存到xml文档

root@lj /h/s/x/3# python 21.py 1+-------------+-----------------+--------------------+------------+---------------+| IP地址 | sysDescr.0 | sysUpTime.0  | sysContact | sysname.0 |+-------------+-----------------+--------------------+------------+---------------+| 192.168.1.1 | X86-windows2000 | 9 hours 42 minutes | zhangsan | computerZhang || 192.168.1.3 |  router  |  24 hours  | ruijIE | Router2 || 192.168.2.1 |  router  |  89 hours  | Cisco | Router3 |+-------------+-----------------+--------------------+------------+---------------+write into sys.xml...

建立数据库的sql文件:

-- MysqL dump 10.16 distrib 10.1.21-MariaDB,for debian-linux-gnu (x86_64)---- Host: localhost Database: localhost-- -------------------------------------------------------- Server version 10.1.21-MariaDB-5 /*!40101 SET @olD_CHaraCTER_SET_CLIENT=@@CHaraCTER_SET_CLIENT */;/*!40101 SET @olD_CHaraCTER_SET_RESulTS=@@CHaraCTER_SET_RESulTS */;/*!40101 SET @olD_ColLATION_CONNECTION=@@ColLATION_CONNECTION */;/*!40101 SET nameS utf8mb4 */;/*!40103 SET @olD_TIME_ZONE=@@TIME_ZONE */;/*!40103 SET TIME_ZONE='+00:00' */;/*!40014 SET @olD_UNIQUE_CHECKS=@@UNIQUE_CHECKS,UNIQUE_CHECKS=0 */;/*!40014 SET @olD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS,FOREIGN_KEY_CHECKS=0 */;/*!40101 SET @olD_sql_mode=@@sql_mode,sql_mode='NO_auto_VALUE_ON_ZERO' */;/*!40111 SET @olD_sql_NOTES=@@sql_NOTES,sql_NOTES=0 */; ---- table structure for table `info`-- DROP table IF EXISTS `info`;/*!40101 SET @saved_cs_clIEnt  = @@character_set_clIEnt */;/*!40101 SET character_set_clIEnt = utf8 */;CREATE table `info` ( `ip` char(15) NOT NulL,`sysDescr` varchar(20) DEFAulT NulL,`sysUpTime` varchar(40) DEFAulT NulL,`sysContract` varchar(20) DEFAulT NulL,`sysname` varchar(20) DEFAulT NulL,PRIMARY KEY (`ip`)) ENGINE=InnoDB DEFAulT CHARSET=utf8mb4;/*!40101 SET character_set_clIEnt = @saved_cs_clIEnt */; ---- DumPing data for table `info`-- LOCK tableS `info` WRITE;/*!40000 ALTER table `info` disABLE KEYS */;INSERT INTO `info` VALUES ('192.168.1.1','computerZhang'),('192.168.1.3','Router2'),('192.168.2.1','Router3');/*!40000 ALTER table `info` ENABLE KEYS */;UNLOCK tableS;/*!40103 SET TIME_ZONE=@olD_TIME_ZONE */; /*!40101 SET sql_mode=@olD_sql_mode */;/*!40014 SET FOREIGN_KEY_CHECKS=@olD_FOREIGN_KEY_CHECKS */;/*!40014 SET UNIQUE_CHECKS=@olD_UNIQUE_CHECKS */;/*!40101 SET CHaraCTER_SET_CLIENT=@olD_CHaraCTER_SET_CLIENT */;/*!40101 SET CHaraCTER_SET_RESulTS=@olD_CHaraCTER_SET_RESulTS */;/*!40101 SET ColLATION_CONNECTION=@olD_ColLATION_CONNECTION */;/*!40111 SET sql_NOTES=@olD_sql_NOTES */; -- Dump completed on 2017-03-23 15:36:31

下面是主要代码

#!/usr/bin/env python# -*- Coding: utf-8 -*-# @Date : 2017-03-23 14:47:39# @Author : 江sir (2461805286@qq.com)# @link : http://www.blogsir.com.cn# @Version : .1 import sysimport xml.etree.ElementTree as ETimport MysqLdbimport argparsefrom prettytable import prettytable  '''一个xml作业,自己用python实现了从xml读取到数据库,和从数据库读取到xml的功能''' def buildNewsXmlfile(data):   root = ET.Element('sys_info')#创建sys_info根元素 # print help(ET) info = ET.SubElement(root,"info",attrib={'ip':'%s'%data[0][0]})#创建四个二级元素 sysDescr = ET.SubElement(info,"sysDescr") sysUpTime = ET.SubElement(info,"sysUpTime") sysContact = ET.SubElement(info,"sysContact") sysname = ET.SubElement(info,"sysname") sysDescr.text = data[0][1] sysUpTime.text = data[0][2] sysContact.text = data[0][3] sysname.text = data[0][4]  info = ET.SubElement(root,attrib={'ip':'%s'%data[1][0]}) sysDescr = ET.SubElement(info,"sysname") sysDescr.text = data[1][1] sysUpTime.text = data[1][2] sysContact.text = data[1][3] sysname.text = data[1][4]  info = ET.SubElement(root,attrib={'ip':'%s'%data[2][0]}) sysDescr = ET.SubElement(info,"sysname") sysDescr.text = data[2][1] sysUpTime.text = data[2][2] sysContact.text = data[2][3] sysname.text = data[2][4]  print 'write into sys.xml...' tree = ET.ElementTree(root) tree.write("sys.xml")  def xml_parser(): data = {} data_List = [] tree = ET.parse('21.xml') root = tree.getroot()# 获取根元素 for info in root.findall('info'): #查找所有info元素  for child in info: #对每个info元素遍历属性和子节点   data ['ip']= info.attrib['ip']   data[child.tag] = child.text   # print data.values()  data_List.append(data.values())   # print data_List return data_List   def get_MysqL(): conn = MysqLdb.connect('localhost','root','sys_info2',charset='utf8') cursor = conn.cursor() cursor.execute('select * from info'); result = cursor.fetchall() if not result:  print 'please insert the database first'  sys.exit()   x = prettytable(['IP地址','sysDescr.0','sysUpTime.0','sysContact','sysname.0']) for i in result:  x.add_row(i) print x  # print result return result def set_MysqL(data): conn = MysqLdb.connect('localhost',charset='utf8') cursor = conn.cursor() for i in data:  # print tuple(i)  sysname,ip,sysDescr,sysContact = tuple(i)  sql = "insert into info values ('%s','%s','%s')"%(ip,sysname)  print '插入语句:',sql  try:   cursor.execute(sql)  except:   print 'please clear the database'   sys.exit() print 'insert success!!!' conn.commit() conn.close()  def clear_MysqL(): conn = MysqLdb.connect('localhost',charset='utf8') cursor = conn.cursor() cursor.execute('delete from info') conn.commit() conn.close()  def main(): parser = argparse.ArgumentParser() parser.add_argument('status',type=int,help="0clar,2insert") arg = parser.parse_args() # print arg status = arg.status if status == 1:  data = get_MysqL()  buildNewsXmlfile(data) elif status == 2:  data = xml_parser()  set_MysqL(data) elif status == 0:  clear_MysqL() else:  print 'usage %s [0|1|2]'%sys.argv[0] if __name__ == '__main__': main()

第四个作业是web编程,用python的flask框架即可快速实现一个xml文档的显示,文件过多,就不贴了

总结

以上就是这文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如有疑问大家可以留言交流,谢谢大家对编程小技巧的支持。

总结

以上是内存溢出为你收集整理的利用python实现xml与数据库读取转换的方法全部内容,希望文章能够帮你解决利用python实现xml与数据库读取转换的方法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1201891.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-04
下一篇2022-06-04

发表评论

登录后才能评论

评论列表(0条)

    保存