得到??将 Netezza 与 Python 连接时作为 unicode 字符的输出

问题描述

我正在尝试从 Netezza 数据库访问 Python 代码中的 unicode(中文、日语等)字符。对于连接,我使用了 Netezza odbc 驱动程序和 sqlalechmy,以及 netezza 中的一个表,其中有一个 nvarchar 类型的列,其中包含中文字符。使用 python 代码访问该汉字时,输出为 ??而不是实际数据。

表有两列,一列数据类型为id,另一列数据类型为nvarchar:

id(int)  Data(nvarchar)
1        你好
2        你好
3        你好

连接代码

connecting_string="DRIVER={Netezzasql};SERVER=hostname;PORT=5480;DATABASE=databaseName;UID=userNamw;PWD=password"
sqlparams = parse.quote_plus(connecting_string)
engine = create_engine(f"netezza+pyodbc:///?odbc_connect={sqlparams}")

netezzaConnection = engine.connect()

解决方法

这是使用 pyodbc 开发 nzalchemy 时的一个已知限制。这在 nzalchemy 的 nzpy 方言中工作正常。

>>> import sqlalchemy
>>> import nzalchemy
>>> engine = sqlalchemy.create_engine("netezza+nzpy://admin:password@localhost:5480/DB1")
>>> conn = engine.connect()
>>> res = conn.execute("select * from t7")
>>> print(res.fetchall())
[('你好',)]

将在 pyodbc 上工作。