Creating Xml From Mysql Query With Python And Lxml
I am trying to use Python and LXML to create an XML file from a Mysql query result. Here is the format I want. con |
Solution 1:
Here's a little example of how you can build xml using lxml.
It's useful to create a helper function for element creation, here's a simple one. I've created a dummy cursor object for demo purposes.
from lxml import etree
from lxml.builder import E as buildE
classDummyCursor(object):
def__init__(self,fields,rows=5):
self.description = [[f] for f in fields]
self.data = [ ["%s%02d" % (f,i) for f in fields] for i inrange(rows) ]
deffetchall(self):
return self.data
defE(tag,parent=None,content=None):
"""Simple E helper"""
element = buildE(tag)
if content isnotNone:
element.text = unicode(content)
if parent isnotNone:
parent.append(element)
return element
deffetchXML(cursor):
fields = [x[0] for x in cursor.description ]
doc = E('data')
for record in cursor.fetchall():
r = E('row',parent=doc)
for (k,v) inzip(fields,record):
E(k,content=v,parent=r)
return doc
doc = fetchXML(DummyCursor(['name','description']))
print etree.tostring(doc,pretty_print=True)
Yields:
<data><row><name>name00</name><description>description00</description></row><row><name>name01</name><description>description01</description></row><row><name>name02</name><description>description02</description></row><row><name>name03</name><description>description03</description></row><row><name>name04</name><description>description04</description></row></data>
Solution 2:
Create or Update XML from MySQL query with Python and lxml, in a AWS s3 bucket.
# -- coding: utf-8 --
from xml.etree import ElementTree
import json, pymysql, requests
import boto3
from boto3.s3.transfer import S3Transfer
BD = 'bd'
HOST = 'host'
USER = 'user'
PASS = 'pass'
HEADERS = {"Content-Type" : "application/json"}
AWS_ACCESS_KEY_ID = 'value_access_key'
AWS_SECRET_ACCESS_KEY = 'value_sercret_access_key'defupdateXMLFunction():
db = pymysql.connect(HOST,USER,PASS,BD)
cursor = db.cursor()
SQL = "SELECT * FROM table_name"
cursor.execute(SQL)
resp = {
"response": {
"message" : "",
"estatus" : "",
}
}
s3 = boto3.resource('s3',
aws_access_key_id=AWS_ACCESS_KEY_ID,
aws_secret_access_key= AWS_SECRET_ACCESS_KEY)
bucket = s3.Bucket('name_carpet_bucket')
object = bucket.Object('filename_heresavetheresult.xml')
columns = [i[0] for i in cursor.description]
allRows = cursor.fetchall()
Document = ElementTree.Element("Document")
try:
for rows in allRows:
Row = ElementTree.SubElement(Document, "Row")
columnNumber = 0for column in columns:
data = rows[columnNumber]
if data == None:
data = ''
data = str(data).replace('&', '\&')
columnas = ('<%s>%s</%s>' % (column,data,column))
ElementTree.SubElement(Row, column).text = data
columnNumber += 1
xmlstr = ElementTree.tostring(Document, encoding='utf8', method='xml')
# print(xmlstr)object.put(Body=xmlstr, ACL='public-read')
resp["response"]["message"] = "Se ha creado el XML correctamente"
resp["response"]["estatus"] = "updated"print(json.dumps(resp, indent=4, sort_keys=True))
return resp
except Exception as e:
resp["response"]["message"] = e
resp["response"]["estatus"] = "error"# print(json.dumps(resp, indent=4, sort_keys=True))return resp
updateXMLFunction()
Post a Comment for "Creating Xml From Mysql Query With Python And Lxml"