Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 21, 2014 16:31:32

Notan1310
Зарегистрирован: 2014-09-14
Сообщения: 98
Репутация: +  0  -
Профиль   Отправить e-mail  

MySQLdb Проблема с кодировкой.

Доброго времени суток. Возникла такая проблема. При выводе из БД символы на русском языке выводятся в виде знкаков вопросов либо в виде символов юникода. Проблему не смог решить поиском. Предлагают решения которые не срабатывают в моем случае.

# -*- coding: utf-8 -*-
import MySQLdb
import string
db = MySQLdb.connect(host='localhost', user='root', passwd='83448344f', db='tests', use_unicode=True)
db.set_character_set('utf8')
cursor = db.cursor()
cursor.execute('SET NAMES utf8;')
cursor.execute('SET CHARACTER SET utf8;')
cursor.execute('SET character_set_connection=utf8;')
sql = """SELECT `name` FROM `city` ORDER BY `name` DESC"""
cursor.execute(sql)
data =  cursor.fetchall()
# перебираем записи
for rec in data:
    print rec
db.close()

Вывод
(u'\u0421\u0430\u043d\u043a\u0442-\u041f\u0435\u0442\u0435\u0440\u0431\u0443\u0440\u0433',)
(u'\u0421\u0430\u043c\u0430\u0440\u0430',)
(u'\u041c\u043e\u0441\u043a\u0432\u0430',)
(u'\u041a\u0430\u0437\u0430\u043d\u044c',)
(u'\u0412\u0435\u043b\u0438\u043a\u0438\u0439 \u041d\u043e\u0432\u0433\u043e\u0440\u043e\u0434',)
Либо знаки вопроса

Офлайн

#2 Сен. 21, 2014 16:43:43

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

MySQLdb Проблема с кодировкой.

А так?

for rec in data:
    print rec[0]



Офлайн

#3 Сен. 21, 2014 16:46:37

Notan1310
Зарегистрирован: 2014-09-14
Сообщения: 98
Репутация: +  0  -
Профиль   Отправить e-mail  

MySQLdb Проблема с кодировкой.

Ощущаю себя ………. Спасибо. Все заработало как нужно. А почему вот именно так работает?Просто я и decode и encode и всяко разно делал, и с бд мудрил

Отредактировано Notan1310 (Сен. 21, 2014 16:47:27)

Офлайн

#4 Сен. 21, 2014 16:51:32

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

MySQLdb Проблема с кодировкой.

class Foo(object):
    def __init__(self, value):
        self.value = value
    def __repr__(self):
        return "<class Foo instance in repr>"
    def __str__(self):
        return str("value=%s" % self.value)
t = (Foo(1), Foo(2), Foo(3))
print t
for foo in t:
    print foo



Офлайн

#5 Сен. 21, 2014 17:04:03

4kpt_II
От: Харьков
Зарегистрирован: 2013-10-24
Сообщения: 999
Репутация: +  58  -
Профиль   Отправить e-mail  

MySQLdb Проблема с кодировкой.

Еще есть фокус, который работает для словарей, списков и наборов:

print repr(dict_or_list_or_tuple).decode("unicode_escape")

P.S. С начала всегда такие ошибки Это нормально.

Отредактировано 4kpt_II (Сен. 21, 2014 17:04:37)

Офлайн

#6 Сен. 21, 2014 17:11:21

Notan1310
Зарегистрирован: 2014-09-14
Сообщения: 98
Репутация: +  0  -
Профиль   Отправить e-mail  

MySQLdb Проблема с кодировкой.

Огромное спасибо. Очень помогли ваши рекомендаций!!!

Офлайн

#7 Сен. 21, 2014 18:26:07

4kpt_II
От: Харьков
Зарегистрирован: 2013-10-24
Сообщения: 999
Репутация: +  58  -
Профиль   Отправить e-mail  

MySQLdb Проблема с кодировкой.

Notan1310
Напрямую не рекомендую работать с мускулом. Лучше использовать ORM. Пока лучший вариант - sqlalchemy.

Отредактировано 4kpt_II (Сен. 21, 2014 18:26:23)

Офлайн

#8 Сен. 21, 2014 19:53:58

Notan1310
Зарегистрирован: 2014-09-14
Сообщения: 98
Репутация: +  0  -
Профиль   Отправить e-mail  

MySQLdb Проблема с кодировкой.

А как вы относитесь к библиотеке pandas? Я мало литературы на русском нашел. Но в целом мануал на английском понятен. Софт для своих целей пишу, иной раз охота стату посмотреть визуально. Стоит ли она изучения? Продуктивна ли? Ваши аналоги? Сорри может тему надо создавать отдельную, но тут вопрос общий, рискнул добавить.
sqlalchemy беру на вооружение. Не знал. Спасибо.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version