Python 간단 한 다 중 태 스 크 my sql xml 변환 방법

4483 단어 Pythonmysqlxml
이 글 은 Python 이 간단 한 다 중 태 스 크 my sql 에서 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     xml, xml      ; xml dom         node
  :param result_cur:
  :param key_list:
  :return:
  '''
  content = ''
  content += '<?xml version="1.0" encoding="UTF-8" ?>\r
' content += '<RECORDS>\r
' # root for item in result_cur: content += '\t<RECORD>\r
' for k in key_list: v = item.get(k, '') real_value = v content += '\t\t<%s>%s</%s>\r
' % (k, real_value, k) content += '\t</RECORD>\r
' content += '</RECORDS>\r
' 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 함수 수정,속도 100 배 증가

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
') fp.write('<RECORDS>\r
') for item in result_cur: fp.write('\t<RECORD>\r
') 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
' % (k, real_value, k)) fp.write('\t</RECORD>\r
') fp.write('</RECORDS>\r
') fp.close()
더 많은 파 이 썬 관련 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있다.
본 논문 에서 말 한 것 이 여러분 의 Python 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기