2014-12-06 3 views
2

Я использую Python 2.7 с jaydebeapi и informix jdbc driver (ifxjdbc.jar) выполнить отборное на столе и все поля имеют u'some_text' Вот мой кодСнятие и»от результата cursor.fetchall()

curs = conn.cursor() 
curs.execute("SELECT * FROM table1") 
res = curs.fetchall() 
print res 

использованием

res_final=[str(x) for x in res[0]] 
print res_final 

преобразовывает первую строчку в результат правильно. Любая идея, как я могу преобразовать все выбранные строки? У меня была та же проблема с sqlite3, но добавлено

conn.text_factory=str 

решил мою проблему. Я не могу найти то, что работает таким же образом для jaydebeapi.

+2

Зачем вам нужно конвертировать в bytestrings ** вообще **? Префикс 'u''' - это просто индикатор * типа *. –

+0

Я пытался передать строки в результате выбора в combobox в PyQT, а также в файле. – albgz

ответ

3

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

Вы можете закодировать все столбцы всех строк с вложенным списком понимания:

res = [col.encode('utf8') if isinstance(col, unicode) else col for col in row] 
     for row in curs.fetchall()] 

который только кодирует значения, которые на самом деле строки Unicode, в манере, которая будет работать со всеми Unicode кодовых.

Если, однако, все, что вас беспокоит, это префикс u'', то есть абсолютно никакой необходимости для кодирования. Не путайте индикатор типа в представлениях контейнера для фактических данных.

+0

Это идеальное состояние.Спасибо! – albgz

Смежные вопросы