使用pg8000读取红移数据时如何避免字节引用列headers
How to avoid byte quoted column headers when reading redshift data with pg8000
我正在通过 pg8000 在 pandas 中加载一些红移数据:
>>>> df = pd.read_sql(sql_text, pg8000_cnx)
pg8000_cnx
是到 redshift 数据库的连接 object。我总是得到字节引用的列,例如:
>>> 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 选项会从数据库连接 object 本身以 utf-8 解码字符串加载列 headers?
这是pg8000 1.16.6中的fixed,所以升级到最新版本应该可以解决问题。
所以从 verion 1.16.6 pg8000 returns 列名称为 str
而不是 bytes
.
我正在通过 pg8000 在 pandas 中加载一些红移数据:
>>>> df = pd.read_sql(sql_text, pg8000_cnx)
pg8000_cnx
是到 redshift 数据库的连接 object。我总是得到字节引用的列,例如:
>>> 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 选项会从数据库连接 object 本身以 utf-8 解码字符串加载列 headers?
这是pg8000 1.16.6中的fixed,所以升级到最新版本应该可以解决问题。
所以从 verion 1.16.6 pg8000 returns 列名称为 str
而不是 bytes
.