简单的多任务mysql转xml
发布时间:2020-05-25 01:34:32 所属栏目:Python 来源:互联网
导读:简单的多任务mysql转xml
|
下面是脚本之家 jb51.cc 通过网络收集整理的代码片段。 脚本之家小编现在分享给大家,也给大家做个参考。 # -*- 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)
以上是脚本之家(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。 如果觉得脚本之家网站内容还不错,欢迎将脚本之家网站推荐给程序员好友。 (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
