Найти - Пользователи
Полная версия: Проблема с записью русского текста в БД
Начало » Python для новичков » Проблема с записью русского текста в БД
1
M
Написал скрипт, который парсит XML-файл, вытягивает оттуда нужные данные и заносит их в таблицу БД в виде SQL-запроса.

# -*- 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
Lexander
Если кодировка на сервере и БД установлена utf8_general_ci, попробуйте просто добавить еще одни параметр use_unicode=True в connect. Еще можно указать параметр charset='utf8'.

Или установите кодировку уже после соединения через метод con.set_character_set - как удобнее.
M
Большое спасибо!)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB