Удаление u из результата cursor.fetchall()

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

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.

1 ответ

Решение

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

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

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

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

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

Другие вопросы по тегам