Python实现简单的多任务mysql转xml的方法

Python实现简单的多任务mysql转xml的方法,第1张

概述本文实例讲述了Python实现简单的多任务mysql转xml的方法。分享给大家供大家参考,具体如下:

本文实例讲述了Python实现简单的多任务MysqL转xml的方法。分享给大家供大家参考,具体如下:

为了需求导出的格式尽量和navicat导出的xml一致。

用的gevent,文件I/O *** 作会阻塞,所以并不会完全异步。

1. MysqL2xml.py:

# -*- Coding: utf-8 -*-'''Created on 2014/12/27@author: Yoki'''import geventimport pyMysqLfrom pyMysqL.cursors import DictCursorimport reimport codecsdb_conn = Nonedef init_MysqL_connect(*args,**kwargs):  global db_conn  db_conn = pyMysqL.connect(*args,**kwargs)def List_to_xml(result_cur,key_List):  '''  MysqL 结果集转xml,非xml标准导出方式; xml dom 不支持相同名字的node  :param result_cur:  :param key_List:  :return:  '''  content = ''  content += '<?xml version="1.0" enCoding="UTF-8" ?>\r\n'  content += '<RECORDS>\r\n' # root节点  for item in result_cur:    content += '\t<RECORD>\r\n'    for k in key_List:      v = item.get(k,'')      real_value = v      content += '\t\t<%s>%s</%s>\r\n' % (k,real_value,k)    content += '\t</RECORD>\r\n'  content += '</RECORDS>\r\n'  return contentdef get_table_rows(tb_name):  '''  获取MysqL表rows  :param tb_name:  :return:  '''  global db_conn  rows = []  cursor = db_conn.cursor(cursor=DictCursor)  cursor.execute('select * from %s' % tb_name)  for row in cursor:    rows.append(row)  return rowsdef get_table_keys(tb_name):  '''  获取表中字段,顺序 为创建表时的顺序  :param tb_name:  :return:  '''  global db_conn  cursor = db_conn.cursor(cursor=DictCursor)  cur = cursor.execute('show create table %s' % tb_name)  if cur != 1:    raise Exception  for r in cursor:    create_sql = r['Create table']    fIElds = re.findall('`(.*?)`',create_sql)    result = []    # 处理字段    for i in xrange(1,len(fIElds)):      fIEld = fIElds[i]      if fIEld in result:        continue      result.append(fIEld)    return result  return []def MysqL_to_xml(tb_name,output_dir='xml',postfix='xml'):  '''  MysqL数据导出xml,  :param tb_name: 数据库表名  :param output_dir:  :param postfix:  :return:  '''  rows = get_table_rows(tb_name)  keys = get_table_keys(tb_name)  content = List_to_xml(rows,keys)  fp = codecs.open('%s/%s.%s' % (output_dir,tb_name,postfix),'w','utf-8')  fp.write(content)  fp.close()tb_List = [  'tb_item','tb_state']if __name__ == '__main__':  init_MysqL_connect(host="localhost",user='user',password="password",database='test',port=3306,charset='utf8')  jobs = []  for tb_name in tb_List:    jobs.append(gevent.spawn(MysqL_to_xml,tb_name))  gevent.joinall(jobs)

2. List_to_xml函数修改,速度提升上百倍

def List_to_xml(result_cur,key_List):  fp = codecs.open('test.xml'),'utf-8')  fp.write('<?xml version="1.0" enCoding="UTF-8" ?>\r\n')  fp.write('<RECORDS>\r\n')  for item in result_cur:    fp.write('\t<RECORD>\r\n')    for k in key_List:      v = item.get(k,'')      if v is None:        real_value = ''      else:        if type(v) == unicode:          real_value = cgi.escape(v)        else:          real_value = v      fp.write('\t\t<%s>%s</%s>\r\n' % (k,k))    fp.write('\t</RECORD>\r\n')  fp.write('</RECORDS>\r\n')  fp.close()

更多关于Python相关内容感兴趣的读者可查看本站专题:《Python+MySQL数据库程序设计入门教程》、《Python常见数据库 *** 作技巧汇总》、《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串 *** 作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录 *** 作技巧汇总》

希望本文所述对大家Python程序设计有所帮助。

总结

以上是内存溢出为你收集整理的Python实现简单的多任务mysql转xml的方法全部内容,希望文章能够帮你解决Python实现简单的多任务mysql转xml的方法所遇到的程序开发问题。

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

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

原文地址: http://outofmemory.cn/langs/1201732.html

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

发表评论

登录后才能评论

评论列表(0条)

保存