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 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python의 None과 NULL의 차이점 상세 정보그래서 대상 = 속성 + 방법 (사실 방법도 하나의 속성, 데이터 속성과 구별되는 호출 가능한 속성 같은 속성과 방법을 가진 대상을 클래스, 즉 Classl로 분류할 수 있다.클래스는 하나의 청사진과 같아서 하나의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.