• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

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

python 搞代码 4年前 (2022-01-09) 19次浏览 已收录 0个评论

这篇文章主要介绍了Python实现简单的多任务mysql转xml的方法,结合实例形式分析了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__'<mark style="color:transparent">来4源gaodaimacom搞#代%码*网</mark>:  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'), 'w', '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, real_value, k))    fp.write('\t</RECORD>\r\n')  fp.write('</RECORDS>\r\n')  fp.close()

更多Python实现简单的多任务mysql转xml的方法相关文章请关注搞代码


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Python实现简单的多任务mysql转xml的方法

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址