【问题标题】:Removing u' from result of cursor.fetchall()从 cursor.fetchall() 的结果中删除 u'
【发布时间】:2015-02-04 18:15:09
【问题描述】:

我正在使用带有jaydebeapiinformix jdbc driver (ifxjdbc.jar) 的python 2.7 在表格上执行选择,并且所有字段都有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. 相同的方法

【问题讨论】:

  • 为什么需要完全转换成字节串? u'' 前缀只是一个类型指示符
  • 我试图将选择产生的行传递到 PyQT 中的组合框以及文件中。

标签: python unicode 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'' 前缀,那么绝对不需要进行编码。不要将容器表示中的类型指示符与实际数据混淆。

【讨论】:

  • 这是完美的。谢谢!
猜你喜欢
  • 1970-01-01
  • 2018-03-06
  • 1970-01-01
  • 2017-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多