# -*- coding: utf8 -*- import MySQLdb import urllib2 import urlparse from xml.dom.minidom import parse def my_get(): url = open('C:\Title3.xml') xml = parse(url) name = xml.getElementsByTagName('w:p') for node in name: el = node.getElementsByTagName('w:rStyle') if (len(el) != 0) and (el[0].hasAttribute('w:val')) and (el[0].attributes['w:val'].value == "a3"): title = node.getElementsByTagName('w:t')[0].firstChild.nodeValue print title con = MySQLdb.connect(host="localhost", user="root", passwd="vertrigo", db="moodle") cur = con.cursor() sql_1="INSERT INTO mdl_course (category, sortorder, fullname, shortname, summaryformat, newsitems) VALUES (1, 10003, '"+title+"', '"+title+"', 1, 5);" try: cur.execute(sql_1) except MySQLdb.DatabaseError, err: print u"Ошибка:", err else: print u"Запрос успешно выполнен" con.commit() cur.close() con.close() raw_input()
И вот с какой проблемой столкнулся:
Я вот парсю свой XML-файл и если я выгружаю оттуда текст английского шрифта, то в БД моей системы всё вставляется отлично. А если вдруг скрипт выгружает данные, записанные русским шрифтом, то во время выполнения запроса к БД, ругается следующим образом:
Traceback (most recent call last):
File “<pyshell#1>”, line 1, in <module>
my_parser.my_get()
File “C:\Python26\my_parser.py”, line 20, in my_get
cur.execute(sql_1)
File “C:\Python26\Lib\site-packages\MySQLdb\cursors.py”, line 156, in execute
query = query.encode(charset)
UnicodeEncodeError: ‘latin-1’ codec can't encode characters in position 111-124: ordinal not in range(256)
Хотя кодировку скрипта в Notepad++ выбрал UTF-8 (без BOM), так как с BOM скрипт не импортируется вообще.
Версия Mysql 5.5.20
Кодировка БД системы выбрана utf8_general_ci