最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

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

来源:动视网 责编:小采 时间:2020-11-27 14:26:47
文档

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

Python实现简单的多任务mysql转xml的方法:这篇文章主要介绍了Python实现简单的多任务mysql转xml的方法,结合实例形式分析了Python查询mysql结果集转xml格式数据输出的相关操作技巧,需要的朋友可以参考下本文实例讲述了Python实现简单的多任务mysql转xml的方法。分享给大家供大家参考,具体如下:为了需
推荐度:
导读Python实现简单的多任务mysql转xml的方法:这篇文章主要介绍了Python实现简单的多任务mysql转xml的方法,结合实例形式分析了Python查询mysql结果集转xml格式数据输出的相关操作技巧,需要的朋友可以参考下本文实例讲述了Python实现简单的多任务mysql转xml的方法。分享给大家供大家参考,具体如下:为了需


这篇文章主要介绍了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 gevent
import pymysql
from pymysql.cursors import DictCursor
import re
import codecs
db_conn = None
def 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" ?>
'
 content += '<RECORDS>
' # root节点
 for item in result_cur:
 content += '	<RECORD>
'
 for k in key_list:
 v = item.get(k, '')
 real_value = v
 content += '	<%s>%s</%s>
' % (k, real_value, k)
 content += '	</RECORD>
'
 content += '</RECORDS>
'
 return content
def 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 rows
def 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'), 'w', 'utf-8')
 fp.write('<?xml version="1.0" encoding="UTF-8" ?>
')
 fp.write('<RECORDS>
')
 for item in result_cur:
 fp.write('	<RECORD>
')
 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('	<%s>%s</%s>
' % (k, real_value, k))
 fp.write('	</RECORD>
')
 fp.write('</RECORDS>
')
 fp.close()

更多Python实现简单的多任务mysql转xml的方法相关文章请关注PHP中文网!

文档

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

Python实现简单的多任务mysql转xml的方法:这篇文章主要介绍了Python实现简单的多任务mysql转xml的方法,结合实例形式分析了Python查询mysql结果集转xml格式数据输出的相关操作技巧,需要的朋友可以参考下本文实例讲述了Python实现简单的多任务mysql转xml的方法。分享给大家供大家参考,具体如下:为了需
推荐度:
标签: 转换 方法 的方法
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top