最开头要说明一下,64位的python, 要配64位的ODBC;32位python配32位的ODBC。
因为在使用pyodbc时,ODBC是跟着Python位来的,虽说有办法可以同时使用32位和64位python,但是我曾下载32位odbc并尝试兼容32位python后并没有连接的上数据库。
另外一个我花了很长时间踩坑的地方就是解决中文乱码问题,文章后面我有写到,也是感谢部门的小伙伴点醒了我在python里设定encoding用GBK而不是UTF-8。需要提醒的是用GBK还是UTF-8是要根据你们自己的数据库情况而定。
下载Informix 64位 ODBC 3.5+ 以及驱动
打开C:\Windows\System32\odbcad32 注意system32里打开的odbc才是64位的odbc进行odbc配置,输入数据库的相关信息
这里的Client Locale和Database Locale根据自己数据库配置设定。
3. 对安装好的IBM Informix Setnet32进行配置。同样根据数据库的信息填写
注意Environment里 CLIENT_LOCALE和DB_LOCALE我设为en_US.819,是因为我们数据库采取的是此配置,这个要根据各自的数据库当初设定情况来填写。
4. ok,我们可以在python里连接数据库了。
我的python是3.7 64位,使用Pyodbc连接。有两种方式:connect DSN 根据前面我们在ODBC数据资源库信息填写
Driver/Server/uid/pwd 根据自己数据库的信息填写
import pyodbc
conn = pyodbc.connect ( 'DSN=***' )
cursor = conn . cursor ( )
cursor.execute('select * from testdbzmq@***:zmqcompany')
cursor.fetchmany(2)
conn = pyodbc.connect('Driver={IBM INFORMIX ODBC DRIVER (64-bit)};Server=***;DATABASE=***;uid=***;pwd=***;encoding = gbk')
cr = conn.cursor()
cr.execute('SELECT first 2 comc from zmqcompany')
cr.fetchmany(2)
连接数据库以后会出现中文展示乱码的情况,用setdecoding方式可以解决
conn.setdecoding(pyodbc.SQL_WCHAR, encoding='GBK')
conn.setdecoding(pyodbc.SQL_CHAR, encoding='GBK')
conn.setencoding(encoding='GBK')
conn.maxwrite = 1024 * 1024 * 1024
cr.execute('SELECT first 2 comc from zmqcompany')
cr.execute('SELECT first 2 comc from zmqcompany')
cr.fetchmany(2)
需要注意的是:我们使用的数据库中文配置为:GBK。
如果是utf-8设置的把GBK 换成UTF-8即可。