1

我正在通过 pg8000 在 pandas 中加载一些红移数据:

>>>> df = pd.read_sql(sql_text, pg8000_cnx)

pg8000_cnx是红移数据库的连接对象。我总是得到字节引用的列,例如:

>>> df.columns
Index([b'column_',
       b'column_2',
       ...
       b'column_n'],
       dtype='object', length=142)

我知道我可以使用.decode('utf-8')和一些列表理解将列转换回字符串,但我试图让它们从 redshift 本身以字符串格式加载。尝试使用 pg8000 光标使用不同CLIENT_ENCODING的设置,但仍然在 pandas df 中获得字节引用列。

import pg8000
conn = pg8000.connect(**db_details)
cursor = conn.cursor()
cursor.execute("SET CLIENT_ENCODING TO 'UTF8'")
cursor.execute(sql)
cursor.fetchone()
# load df here

是否有一些我缺少的 redshift 或 pg8000 选项会从 db 连接对象本身加载 utf-8 解码字符串中的列标题?

4

1 回答 1

1

这在 pg8000 1.16.6 中已修复,因此升级到最新版本应该可以解决问题

所以从版本 1.16.6 pg8000 返回列名str而不是bytes.

于 2020-10-31T08:48:54.500 回答