激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - Python實現簡單的多任務mysql轉xml的方法

Python實現簡單的多任務mysql轉xml的方法

2020-09-20 10:38toil Python

這篇文章主要介紹了Python實現簡單的多任務mysql轉xml的方法,結合實例形式分析了Python查詢mysql結果集轉xml格式數據輸出的相關操作技巧,需要的朋友可以參考下

本文實例講述了Python實現簡單的多任務mysqlxml的方法。分享給大家供大家參考,具體如下:

為了需求導出的格式盡量和navicat導出的xml一致。

用的gevent,文件i/o操作會阻塞,所以并不會完全異步。

1. mysql2xml.py:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
# -*- 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函數修改,速度提升上百倍

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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程序設計有所幫助。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产午夜亚洲精品 | 日韩一级成人 | 亚洲第一成人在线观看 | 亚洲国产综合在线观看 | 久久综合伊人 | 55夜色66夜色国产精品视频 | 国产二三区 | 日日鲁夜夜视频热线播放 | 日产精品久久久久久久 | 一级欧美日韩 | 久久千人斩 | 久久美女色视频 | 2021国产精品 | 午夜伊人| 一区二区三区手机在线观看 | 欧美另类在线视频 | 全黄毛片 | 国产精品视频一区二区三区综合 | 欧美成人一区免费视频 | 国内精品久久久久影院不卡 | 91精品福利视频 | 日韩精品久久久 | 狠狠干导航 | 欧美日韩在线视频一区 | 免费一区区三区四区 | 撅高 自己扒开 调教 | 免费一级欧美大片视频 | 国产成人在线免费视频 | 黄色网址免费在线 | 久久国产精品电影 | 毛毛片在线看 | 天天透天天狠天天爱综合97 | 最新日韩中文字幕 | 欧美淫视频 | 成人综合在线观看 | 亚洲午夜免费电影 | 国内精品视频饥渴少妇在线播放 | 欧美成人高清视频 | 欧美三级欧美成人高清www | 久久午夜国产 | 一级性生活视频 |