Skip to content Skip to sidebar Skip to footer

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"