加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

简单的多任务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】收集整理供大家参考研究

如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读