ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

linux-如何使用pyodbc / unixODBC从python3中的Informix数据库连接选择数据

2019-11-11 18:50:52  阅读:468  来源: 互联网

标签:informix python-3-x unixodbc linux pyodbc


我在使用python3.5和pyodbc / unixODBC从Informix数据库表中选择数据时遇到问题.

我有一个小的py文件(ifx.py),其内容是:

import pyodbc
db=pyodbc.connect('DSN=Test1')
db.execute("SELECT * FROM customer ")

我得到一个错误:

pyodbc.Error: ('HY000', '[HY000] [Informix][Informix ODBC Driver]Invalid byte in codeset conversion input. (21000) (SQLExecDirectW)')

我完成的所有搜索都暗示与LOCALE设置有关,但是我检查了一下,并将它们设置为相同:

CLIENT_LOCALE=en_US.819
DB_LOCALE=en_US.819
dbs_collate=en_US.819

如果我使用unixODBC’isql’实用程序,则可以连接并愉快地查询数据.

版本信息.

unixODBC.x86_64 0:2.2.14-14.el6
pyodbc.version => '4.0.6'
Linux => Red Hat Enterprise Linux Server release 6.8 
python3.5 => Python 3.5.3 
Database => IBM Informix Dynamic Server Version 12.10.FC6X5 
ClientSDK => IBM Informix CSDK Version 4.10, IBM Informix-ESQL Version 4.10.FC6

环境变量ODBCINI指向/etc/odbc.ini.内容是:

[ODBC Data Sources]
Test1=IBM INFORMIX ODBC DRIVER
;
; Define ODBC Database Driver's Below - Driver Configuration Section
;
[Test1]
Driver=/opt/informix/lib/cli/iclis09b.so
Description=IBM INFORMIX ODBC DRIVER
Database=eunice
LogonID=
pwd=
Servername=indika_test
Port=9916
CursorBehavior=0
CLIENT_LOCALE=en_US.819
DB_LOCALE=en_US.819
TRANSLATIONDLL=/opt/informix/lib/esql/igo4a304.so

/etc/odbcinst.ini内容:

[ODBC Drivers]
IBM INFORMIX ODBC DRIVER=Installed
[IBM INFORMIX ODBC DRIVER]
Driver=/opt/informix/lib/cli/iclit09b.so
Setup=/opt/informix/lib/cli/iclit09b.so
APILevel=1
ConnectFunctions=YYY
DriverODBCVer=03.51
FileUsage=0
SQLLevel=1
smProcessPerConnect=Y

并且odbcinst -j输出是

unixODBC 2.2.14
DRIVERS............: /etc/odbcinst.ini
SYSTEM DATA SOURCES: /etc/odbc.ini
FILE DATA SOURCES..: /etc/ODBCDataSources
USER DATA SOURCES..: /etc/odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8

在此先感谢您的帮助或建议.

解决方法:

这可能是由于客户表中的多字节字符,无法将其从UTF8转换为拉丁文1,即ISO 8859-1.即使在CLIENT_LOCALE和DB_LOCALE上设置了相同的代码,ODBC客户端也会从UTF-8到8859进行内部转换.如果有任何2字节字符(超出扩展ASCII 255的字符),它们将不会转换为Latin-1客户.我将查看客户表中的数据并找出有问题的数据.

标签:informix,python-3-x,unixodbc,linux,pyodbc
来源: https://codeday.me/bug/20191111/2021792.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有