Была поставлена такая задача, взять упакованный в .gz архив xml файл, распаковать его, прочитать и записать в базу данных. С помощью поиска в интернете написал следующий код
import string import gzip import MySQLdb from xml.parsers import expat import datetime start_time = datetime.datetime.now() db = MySQLdb.connect("localhost","root","","bd") db.query("SET NAMES cp1251") cursor = db.cursor() insert = 0 update = 0 def start_element(name,attrs): global update global insert global db if name == "row": cursor = db.cursor() command1 = ("SELECT * FROM tov WHERE kod='" + attrs["kod"] + "';").decode("utf8").encode("cp1251") cursor.execute(command1) rows = db.affected_rows() if rows == 0: query = "SELECT MAX(sort) AS mid FROM pop" cursor.execute(query) row = cursor.fetchone() newsort = row[0] + 1 insert = insert + 1 else: query = "UPDATE tov SET name = '"+ attrs["name"] + "'" newquery = query.decode("utf8").encode("cp1251") cursor.execute(newquery) update = update + 1 def end_element(name): pass def chardata_element(data): pass p = expat.ParserCreate() p.returns_unicode = 0 p.StartElementHandler = start_element p.EndElementHandler = end_element p.CharacterDataHandler = chardata_element f = gzip.GzipFile(myfile.xml.gz","rb") content = f.read() p.Parse(content)
File “/usr/local/lib/python2.4/site-packages/MySQLdb/cursors.py”, line 146, in executeНе могли бы те кто сталкивался с этой проблемой, решить ее???
query = query.encode(charset)
UnicodeDecodeError: ‘ascii’ codec can't decode byte 0xc4 in position 38: ordinal not in range(128)