Vertica Python读取结果会抛出UnicodeDecodeError

时间:2016-10-22 19:22:32

标签: python encode

我只是在下拉数据库表并尝试将其读入python,如下所示:

with query(full_query_string) as cur: arr = cur.fetchall()

这会从fetchall()

产生以下错误

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc3 in position 4: invalid continuation byte

如果我select *我收到此错误,而如果我限制为少量行,我不会收到此错误。在我发布这篇SO UnicodeDecodeError, invalid continuation byte之后,我尝试使用一些编码付费,但他们都没有做到这一点。在一个大型数据库表中,我不知道编码是如何出错的,处理这个问题的最有效方法是什么?此外,没有特定的行是必须的,但我宁愿得到除了那些编码问题之外的所有行。

1 个答案:

答案 0 :(得分:4)

嘿,我知道这是一个超级迟到的答案,但在尝试调试类似的问题时,我从vertica-python自述文件中找到了这个修复:

  

虽然Vertica期望存储的varchars有时是UTF-8编码的   无效的字符串进入数据库。您可以指定如何处理   使用unicode_error连接选项读取这些字符。   它使用与unicode类型相同的值   (https://docs.python.org/2/library/functions.html#unicode

尝试更改' unicode_error'密钥从strictreplaceignore

cur = vertica_python.Connection({..., 'unicode_error': 'strict'}).cursor() 
cur.execute(r"SELECT E'\xC2'") cur.fetchone()
# caught 'utf8' codec can't decode byte 0xc2 in position 0: unexpected end of data

cur = vertica_python.Connection({..., 'unicode_error': 'replace'}).cursor() 
cur.execute(r"SELECT E'\xC2'") cur.fetchone()
# �

cur = vertica_python.Connection({..., 'unicode_error': 'ignore'}).cursor() 
cur.execute(r"SELECT E'\xC2'") cur.fetchone()
#