Форум сайта python.su
0
Подскажите как работать с данными в уникодах в mysql. Что я делаю не так?
>>> import MySQLdb
>>> db=MySQLdb.connect(user=“***”, passwd=“*****”, db=“test”, use_unicode=True)
>>> a= u'test тест'
>>> db.escape_string(a)
Traceback (most recent call last):
File “<stdin>”, line 1, in <module>
UnicodeEncodeError: ‘ascii’ codec can't encode characters in position 5-8: ordinal not in range(128)
Спасибо
Офлайн
0
Не, я прогнал. отставить пост!)
Отредактировано Felixx (Апрель 4, 2012 23:14:51)
Офлайн
5
База в какой кодировке?
Хотя какая разница. Посмотрев в нете, функцию экранирования больше используют к пакету а не к коннекту. Т.е. MySQLdb.escape_string(…). Ну раз он не викидывает исключения NoAttribute то хз. Модуля нет под руками чтоб протестить. Ждите что кто нить толковое подскажет )
Отредактировано Piton23 (Апрель 5, 2012 08:10:47)
Офлайн
0
Piton23
База в какой кодировке?
Хотя какая разница. Посмотрев в нете, функцию экранирования больше используют к пакету а не к коннекту. Т.е. MySQLdb.escape_string(…). Ну раз он не викидывает исключения NoAttribute то хз. Модуля нет под руками чтоб протестить. Ждите что кто нить толковое подскажет )
Офлайн
5
Ты попробуй пока инсертнуть в базу значения где будешь обрабатывать через MySQLdb.escape_string(a), а не через db.escape_string(a), пробуй экспериментируй. А если будет выскакивать UnicodeEncodeError то приведи здесь пример втавки значения в базу, дальше будем смотреть.
Да кстати перед escape пробуй также encode('utf-8'), т.е.
MySQLdb.escape_string(a.encode('utf-8'))
Либо жди когда более опытный даст тебе совет :)
Офлайн
14
escape_string желает работать с байтами. a имеет тип unicode. При преобразовании str(a) вызывается кодек по умолчанию, имя которому ascii. До собственно MySQL дело не доходит.
Офлайн