Python - О результатах, полученных из MySQL - PullRequest
0 голосов
/ 13 октября 2010
>>> c = conn.cursor()

>>> c.execute('select * from stocks order by price')
>>> for row in c:
...    print row
...

(u'2006-01-05', u'BUY', u'RHAT', 100, 35.14)

(u'2006-03-28', u'BUY', u'IBM', 1000, 45.0)

Как мы видим, перед каждым столбцом стоит «и». И становится все хуже в моей БД.

Как мы можем напечатать нормальную строку?

Ответы [ 3 ]

1 голос
/ 13 октября 2010

У меня такое ощущение, что вы не очень привыкли использовать Юникод.Для начала ( 1 ):

" Нет такого понятия, как простой текст.

Если у вас естьСтрока, в памяти, в файле или в сообщении электронной почты, вы должны знать, в какой кодировке он находится, или вы не можете интерпретировать его или правильно отобразить его пользователям. "

u передтекстовые пометки о том, что вы имеете дело с unicode объектом вместо string объекта.Таким образом, если вы создаете строковое представление объекта Unicode, символ u всегда будет отображаться.

Чтобы удалить объект u, вам необходимо закодировать объект unicode с помощью определенной кодировки.Например, если вы используете консоль с кодировкой utf-8, вы хотите создать строковое представление ваших данных в кодировке utf-8.

Объекты Unicode можно кодировать с помощью encode.Например:

print row[0].encode('utf-8')

Должно привести к

2006-01-05

... ЕСЛИ ваша консоль / терминал использует ту же кодировку (utf-8).

АналогичноВы можете перебирать кортежи:

for row in c:
    print tuple(x.encode('utf-8') for x in row)

Я абсолютно, настоятельно рекомендую, возможно, даже настаиваю, чтобы вы читали: " Абсолютный минимум Каждый разработчик программного обеспечения должен абсолютно, положительно знать о Unicode и наборах символов (нетОправдания!) ».Юникод может быть непростым для начала, но когда вы овладеете концепциями, он станет вашим новым лучшим другом - и чем больше вы увидите u, тем счастливее вы станете.Поверь мне.

0 голосов
/ 13 октября 2010

Преобразование строк Юникода в кортеже строк в обычные строки:

for row in c:
    print tuple(str(x) for x in row)
0 голосов
/ 13 октября 2010

'u' представляет юникод.Вы можете работать с ними, как струны.Если вы действительно хотите строки, тогда сделайте str(u'BUY').

ОБНОВЛЕНИЕ: Я пропустил вопрос.Приведенный ниже код для БД MySQL, а не mysqli.Извините за путаницу.Не удаляя контент.

Также просто предложение.Вместо того, чтобы просто использовать курсор, который возвращает кортеж в качестве набора результатов.Используйте 'dict' в качестве курсора.Это даст вам простой доступ к словарю с именами полей в качестве ключей и соответствующими значениями в виде строк.Это более питонический.Это можно сделать следующим образом -

cursor = conn.cursor(MySQLdb.cursors.DictCursor)

вместо

cursor = conn.cursor()

Где conn - это объект подключения, полученный из MySQLdb.connect() method

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...