国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

利用python實現xml與數據庫讀取轉換的方法

2020-01-04 17:21:11
字體:
來源:轉載
供稿:網友

前言

xml課的第三第四個作業都是用java編程來實現xml dom的一些轉換, 因為自己沒怎么學過java,因此和老師說了下想用python/197719.html">python/200490.html">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','router','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','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');/*!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.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, "info",attrib={'ip':'%s'%data[1][0]}) sysDescr = ET.SubElement(info,"sysDescr") sysUpTime = ET.SubElement(info,"sysUpTime") sysContact = ET.SubElement(info,"sysContact") sysName = 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, "info",attrib={'ip':'%s'%data[2][0]}) sysDescr = ET.SubElement(info,"sysDescr") sysUpTime = ET.SubElement(info,"sysUpTime") sysContact = ET.SubElement(info,"sysContact") sysName = 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','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','root','root','sys_info2',charset='utf8') cursor = conn.cursor() for i in data:  # print tuple(i)  sysName,ip,sysUpTime,sysDescr,sysContact = tuple(i)  sql = "insert into info values ('%s','%s','%s','%s','%s')"%(ip,sysDescr,sysUpTime,sysContact,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','root','root','sys_info2',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,1read,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文檔的顯示,文件過多,就不貼了

總結

以上就是這文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如有疑問大家可以留言交流,謝謝大家對VEVB武林網的支持。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 郧西县| 鄂伦春自治旗| 花莲市| 平山县| 贵阳市| 恩平市| 建瓯市| 阳西县| 桂平市| 达日县| 邵阳市| 定兴县| 美姑县| 贡山| 宜春市| 普兰县| 东乌珠穆沁旗| 泰宁县| 敖汉旗| 青海省| 湘潭市| 桓仁| 辉县市| 东光县| 公安县| 来凤县| 绵阳市| 漾濞| 营口市| 南丰县| 高州市| 绍兴县| 靖安县| 三都| 千阳县| 蓝山县| 巍山| 碌曲县| 临泽县| 宜兴市| 卢氏县|