2014-12-06 78 views
2

我使用Python 2.7版与jaydebeapiinformix jdbc driver (ifxjdbc.jar)执行一个表上的选择,所有的领域都有u'some_text' 下面是使用从()cursor.fetchall的结果删除U”

我的代码

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

为什么你需要转换为所有**的字节**? 'u'''前缀只是一个*类型的指示符*。 – 2014-12-06 18:50:36

+0

我试图将选择产生的行传递给PyQT中的组合框以及文件中。 – albgz 2014-12-06 19:04:59

回答

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 2014-12-06 19:03:40