Connect database through odbc driver with python

运行环境

Mac OS 10.12.6
python 3.6.2
pip 9.0.1

安装步骤

  1. 下载所需odbc driver。由于笔者安装ODBC是为了连接Vertica, 此文以Vertica 7.2.x ODBC为例. 进入obbc driver下载页面, 找到对应版本,下载并安装pkg文件,默认配置安装即可。

  2. 安装pyodbc

     $pip3 install --upgrade pyodbc
    
  3. 使用python连接Vertica

     import pyodbc        
     conn = pyodbc.connect(driver='Vertica', server= ServerAddress, Port=Port,database='', uid=UserID, pwd=password)
    

安装问题

  1. pip install pyodbc 报错

Error:
src/pyodbc.h:56:10: fatal error: 'sql.h' file not found
#include <sql.h>
^~~~~~~
1 error generated.
error: command 'clang' failed with exit status 1

解决办法
使用unixodbc Manager替代Apple的 iODBC Driver Manager

    $ brew install unixodbc & pip3 install -U pyodbc
  1. 连接报错

Error: ('01000', "[01000] [unixODBC][Driver Manager]Can't open lib 'ODBC Driver 13 for SQL Server' : file not found (0) (SQLDriverConnect)")

解决办法
应该是odbc driver的配置文件没有配置好

    $ odbcinst -j

我的配置返回

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

通常odbcinst.init和odbc.init放在了/etc下面,我的调用了/usr/local/etc/odbcinst.ini,打开发现是空的,而/etc/odbcinst.ini不空,将两个文件从/etc复制到/usr/local/etc即可。

  $ cp /etc/odbc.ini /etc/odbcinst.ini /usr/local/etc/

推荐阅读更多精彩内容