问题描述
我正在尝试从 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 上工作。