使用CX_Oracle和Pandas从Oracle数据库读取Unicode字符“ü”时的编码问题

问题描述 投票:0回答:1

我正在尝试读取一个数据帧中的Oracle数据表输出,我需要将其与另一个数据帧进行比较。

Oracle具有str值Unicode字符“ü”,在数据框中显示为“ u”。

我尝试过的代码:

import pandas as pd
import cx_Oracle

conn = cx_Oracle.makedsn(host='hostname', port='1521', service_name= 'SomeName')
sqlconn = cx_Oracle.connect( user='Username', password='$$$$$', dsn=conn)
sqlquery = "Select statement"
df2 = pd.read_sql(sqlquery, sqlconn)

print(df2)
**UBERX**,2003-10-01 00:00:00,I,N/A,Not Available

Expected 
**ÜBERX**,2003-10-01 00:00:00,I,N/A,Not Available

如果我将输出导出到csv

df2.to_csv('/home/user/05June_1_ORA.csv', index=False)

在Unix loc:

bash-4.2$ file -i *
05June_1_ORA.csv: text/plain; charset=us-ascii

此数据正使用csv提取到oracle,其编码为utf-8

sourcefile_05June_1.csv:     text/plain; charset=utf-8

请让我知道如何解决。

python pandas oracle cx-oracle
1个回答
3
投票

连接到数据库时,请确保设置编码。这将在cx_Oracle 8中成为默认设置,但现在,请执行以下操作:

sqlconn = cx_Oracle.connect(user='Username', password='$$$$$', dsn=conn,
        encoding="UTF-8", nencoding="UTF-8")
© www.soinside.com 2019 - 2024. All rights reserved.