简单的多任务mysql转xml
发布时间:2020-12-17 17:04:32 所属栏目:Python 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 # -*- coding: utf-8 -*-'''Created on 2014/12/27@author: Yoki'''import geventimport pymysqlfrom pymysql.cursors import DictCursorimport reimp
以下代码由PHP站长网 52php.cn收集自互联网 现在PHP站长网小编把它分享给大家,仅供参考 # -*- 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" ?>rn' content += '<RECORDS>rn' # root节点 for item in result_cur: content += 't<RECORD>rn' for k in key_list: v = item.get(k,'') real_value = v content += 'tt<%s>%s</%s>rn' % (k,real_value,k) content += 't</RECORD>rn' content += '</RECORDS>rn' 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) 以上内容由PHP站长网【52php.cn】收集整理供大家参考研究 如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |