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
class DummyCursor(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 in range(rows) ]
def fetchall(self):
return self.data
def E(tag,parent=None,content=None):
"""Simple E helper"""
element = buildE(tag)
if content is not None:
element.text = unicode(content)
if parent is not None:
parent.append(element)
return element
def fetchXML(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) in zip(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'
def updateXMLFunction():
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 = 0
for 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"