欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python實現(xiàn)簡單的多任務mysql轉(zhuǎn)xml的方法

 更新時間:2017年02月08日 09:40:27   作者:toil  
這篇文章主要介紹了Python實現(xiàn)簡單的多任務mysql轉(zhuǎn)xml的方法,結(jié)合實例形式分析了Python查詢mysql結(jié)果集轉(zhuǎn)xml格式數(shù)據(jù)輸出的相關操作技巧,需要的朋友可以參考下

本文實例講述了Python實現(xiàn)簡單的多任務mysql轉(zhuǎn)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 結(jié)果集轉(zhuǎn)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節(jié)點
  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):
  '''
  獲取表中字段,順序 為創(chuàng)建表時的順序
  :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數(shù)據(jù)導出xml,
  :param tb_name: 數(shù)據(jù)庫表名
  :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函數(shù)修改,速度提升上百倍

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相關內(nèi)容感興趣的讀者可查看本站專題:《Python+MySQL數(shù)據(jù)庫程序設計入門教程》、《Python常見數(shù)據(jù)庫操作技巧匯總》、《Python數(shù)據(jù)結(jié)構與算法教程》、《Python Socket編程技巧總結(jié)》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python入門與進階經(jīng)典教程》及《Python文件與目錄操作技巧匯總

希望本文所述對大家Python程序設計有所幫助。

相關文章

  • Python pymysql向SQL語句中傳參的多種方法

    Python pymysql向SQL語句中傳參的多種方法

    這篇文章主要介紹了Python-pymysql如何向SQL語句中傳參,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-05-05
  • Python代碼調(diào)用執(zhí)行shell踩坑解決

    Python代碼調(diào)用執(zhí)行shell踩坑解決

    這篇文章主要為大家介紹了Python代碼調(diào)用執(zhí)行shell,踩過的坑解決方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-06-06
  • Python異常處理之try...except語句

    Python異常處理之try...except語句

    Python異常處理是Python中重要的一部分,為了保證程序的穩(wěn)定性和可靠性,我們需要使用異常處理來及時捕獲,并以優(yōu)雅的方式來處理這些異常,本教程將介紹如何處理?Python中的異常,需要的朋友可以參考下
    2023-06-06
  • python基礎之定義類和對象詳解

    python基礎之定義類和對象詳解

    這篇文章主要為大家詳細介紹了python的定義類和對象,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • python里運用私有屬性和方法總結(jié)

    python里運用私有屬性和方法總結(jié)

    在本文里我們給大家分享了關于python里運用私有屬性和方法總結(jié)以及相關知識點內(nèi)容,有興趣的朋友們跟著參考學習下。
    2019-07-07
  • python中JWT用戶認證的實現(xiàn)

    python中JWT用戶認證的實現(xiàn)

    這篇文章主要介紹了python中JWT用戶認證的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-05-05
  • 詳解Python正則表達式re模塊

    詳解Python正則表達式re模塊

    這篇文章主要介紹了Python正則表達式re模塊,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-03-03
  • Python獲取數(shù)據(jù)庫數(shù)據(jù)并保存在excel表格中的方法

    Python獲取數(shù)據(jù)庫數(shù)據(jù)并保存在excel表格中的方法

    今天小編就為大家分享一篇Python獲取數(shù)據(jù)庫數(shù)據(jù)并保存在excel表格中的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-06-06
  • Python實現(xiàn)過迷宮小游戲示例詳解

    Python實現(xiàn)過迷宮小游戲示例詳解

    這篇文章主要介紹的是基于Python實現(xiàn)一個簡單的過迷宮小游戲,文中的示例代碼講解詳細,對我們學習Python有一定的幫助,感興趣的可以學習一下
    2021-12-12
  • openCV中值濾波和均值濾波的代碼實現(xiàn)

    openCV中值濾波和均值濾波的代碼實現(xiàn)

    在我們生活中的有很多時候都可以用到濾波,例如美顏的磨皮功能,本文就詳細的介紹了openCV中值濾波和均值濾波的代碼實現(xiàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03

最新評論