本文实例讲述了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" ?>\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 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" ?>\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相关内容感兴趣的读者可查看本站专题:《Python+MySQL数据库程序设计入门教程》、《Python常见数据库操作技巧汇总》、《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》
希望本文所述对大家Python程序设计有所帮助。
# Python
# 多任务
# mysql
# 转
# xml
# python实现的多任务版udp聊天器功能案例
# python多线程案例之多任务copy文件完整实例
# python多任务之协程的使用详解
# python多任务及返回值的处理方法
# 协程Python 中实现多任务耗资源最小的方式
# 操作技巧
# 程序设计
# 进阶
# 相关内容
# 感兴趣
# 数据结构
# 给大家
# 不支持
# 更多关于
# 所述
# 使用技巧
# 编程技巧
# 讲述了
# dom
# key_list
# result_cur
# param
# node
相关文章:
为什么Go需要go mod文件_Go go mod文件作用说明
深圳网站制作培训,深圳哪些招聘网站比较好?
如何用免费手机建站系统零基础打造专业网站?
如何在阿里云虚拟服务器快速搭建网站?
如何快速配置高效服务器建站软件?
宝塔建站无法访问?如何排查配置与端口问题?
如何通过WDCP绑定主域名及创建子域名站点?
免费ppt制作网站,有没有值得推荐的免费PPT网站?
上海网站制作网站建设公司,建筑电工证网上查询系统入口?
上海网站制作开发公司,上海买房比较好的网站有哪些?
寿县云建站:智能SEO优化与多行业模板快速上线指南
如何续费美橙建站之星域名及服务?
电视网站制作tvbox接口,云海电视怎样自定义添加电视源?
建站10G流量真的够用吗?如何应对访问高峰?
建站之星logo尺寸如何设置最合适?
内部网站制作流程,如何建立公司内部网站?
如何快速搭建自助建站会员专属系统?
ui设计制作网站有哪些,手机UI设计网址吗?
如何在宝塔面板中修改默认建站目录?
如何在阿里云通过域名搭建网站?
如何配置FTP站点权限与安全设置?
C++时间戳转换成日期时间的步骤和示例代码
如何通过虚拟主机空间快速建站?
php8.4新语法match怎么用_php8.4match表达式替代switch【方法】
PHP 500报错的快速解决方法
如何使用Golang table-driven基准测试_多组数据测量函数效率
如何在Ubuntu系统下快速搭建WordPress个人网站?
如何在Golang中引入测试模块_Golang测试包导入与使用实践
网站制作报价单模板图片,小松挖机官方网站报价?
宝盒自助建站智能生成技巧:SEO优化与关键词设置指南
专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?
小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?
如何在IIS服务器上快速部署高效网站?
北京营销型网站制作公司,可以用python做一个营销推广网站吗?
如何在景安云服务器上绑定域名并配置虚拟主机?
建站为何优先选择香港服务器?
公司网站设计制作厂家,怎么创建自己的一个网站?
存储型VPS适合搭建中小型网站吗?
在线教育网站制作平台,山西立德教育官网?
如何选择适合PHP云建站的开源框架?
在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?
建站主机选购指南与交易推荐:核心配置解析
清单制作人网站有哪些,近日“兴风作浪的姑奶奶”引起很多人的关注这是什么事情?
香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化
大学网站设计制作软件有哪些,如何将网站制作成自己app?
建站之星后台密码如何安全设置与找回?
建站主机选购指南:核心配置优化与品牌推荐方案
黑客如何通过漏洞一步步攻陷网站服务器?
建站之星价格显示格式升级,你的预算足够吗?
子杰智能建站系统|零代码开发与AI生成SEO优化指南
*请认真填写需求信息,我们会在24小时内与您取得联系。