使用pyodbc连接SqlServer数据库问题总结

使用pyodbc连接SqlServer数据库问题总结

一、背景
1.系统:ubuntu
2.开发环境:sophon的notebook
3.工具版本:ubuntu18.04、unixodbc2.3.4(需要2个包,下面详细说明)、msodbcsql17、freetds1.1.6、python3.6.7、pyodbc4.0.26
4.数据库:SqlServer2012
5.环境无法连接外网,所有安装,只能离线手动编译安装
二、需求
1.要求使用pyodbc连接SqlServer2012数据库

三、安装过程
1.安装之前先切换到root用户,避免权限不足
2.离线手动编译安装unixodbc
(1)由于应用程序通过unixODBC来访问数据源。我们需分别安装unixodbc,unixodbc-dev

(2)下载unixodbc_2.3.4-1.1ubuntu3_amd64.deb 和 unixODBC-2.3.4.tar.gz安装包

(3)安装unixODBC-2.3.4.tar.gz
① tar -xvf unixODBC-2.3.4.tar.gz
② cd unixODBC-2.3.4
③ ./configure --prefix=指定安装路劲
④ make
⑤ make install

(4)安装unixodbc_2.3.4-1.1ubuntu3_amd64.deb
① dpkg -i <package.deb> (直接安装即可)

(5)这个2个是不同的安装包,安装后,如下图所示:

3.离线手动编译安装SqlServer driver
(1)安装之前先使用 cat /etc/issue 命令检查ubuntu系统的版本(因为sql server driver版本和ubuntu版本有对应关系)

(2)这里ubuntu版本: 18.04.2,所以对应SqlServer driver版本应该是17,其他版本可以根据以下链接查看:
SqlServer driver版本查看

(3)下载 相应的驱动包msodbcsql17_17.3.1.1-1_amd64.deb
(4)dpkg -i msodbcsql17_17.3.1.1-1_amd64.deb (直接安装即可)

4.离线手动编译安装freetds
(1)下载freetds-dev.1.1.60.tar.bz2安装包
(2)tar -xvf freetds-dev.1.1.60.tar.bz2
(3)cd freetds-0.91

(4)# 编译安装 —耐心等待执行完成
./configure --prefix=/usr/local/freetds --with-tdsver=8.0 --enable-msdblib --enable-dbmfix --with-gnu-ld --enable-shared --enable-static (这里tdsver要根据SqlServer版本填写,本次要连接的sqlserver 2012版本,所以此处tdsver=8.0)

(5)make && make install

(6)# 配置freetds:
echo “/usr/local/freetds/lib” >> /etc/ld.so.conf.d/freetds.conf

(7)# 然后运行以下指令使配置生效
ldconfig -v

5.安装pyodbc
(1)下载 pyodbc_4.0.26.tar.gz
(2)放入到镜像外的 /var/sophon1/pypi-server 中
(3)在notebook镜像中,直接使用pip3 install pyodbc 命令直接安装

四、Python3 freetds.conf、odbcinst.ini、odbc.ini这3个配置文件之间的关系,以及配置内容的意义
1.unixODBC驱动管理器会管理数据库驱动和数据源,它是通过配置文件管理。数据库驱动的配置文件和数据源的配置文件,分别是 odbcinst.ini和odbc.ini。下面是相关配置信息:

2.FreeTDS中的freetds.conf配置数据源:
(1)如下图所示,根据freetds安装路劲,找到freetds.conf配置文件,
这里的路径为:/usr/local/freetds/etc/freetds.conf
(2)freetds.conf内容如下图,主要配置信息:

[DSN]
host = sqlserver的ip
port = port
tds version = 8.0(此处需要注意: 8.0对应的是sqlserver2012版本,其他版本自行百度)

①**注意:这里的 [DSN] 是自定义的名称,这个名称就是odbc.ini配置文件中的Servername=后面要填写的值。具体请看odbc.ini文件相关配置

3.UnixODBC里的odbcinst.ini指明odbc的驱动程序:
(1)配置文件位置:/etc/odbcinst.ini
(2)配置文件内容如下图所示
[FreeTDS]
Description=FreeTDS (这是描述可不写)
Driver=/usr/local/lib/libtdsodbc.so(这个驱动包必须要正确,不然会报找不到驱动)
UsageCount=1

①**注意:
1)这里的 [FreeTDS] 是自定义的名称,这个名称就是odbc.ini配置文件中的Driver=后面要填写的值。具体请看odbc.ini文件相关配置
2)如果Driver等于号后面的要填写的 libtdsodbc.so 这个包不知道具体路径,可以用以下命令进行查询:
rpm -ql unixODBC-devel-2.2.14-14.el6.x86_64,或者用find 命令搜索

4.在UnixODBC中的odbc.ini中配置:
(1)配置文件的位置:/etc/odbc.ini
(2)配置文件内容如下图所示:
[SqlServer]
Driver=FreeTDS (驱动,也就是配置文件odbcinst.ini中自定义的那个名称)
Description=”” (这是描述可不写)
Servername=DSN (数据源,也就是配置文件freetds.conf中自定义的那个名称)
Database=newwind(这是想要连接的SqlServer中的数据库名称)
①*注意:Driver 和 Servername 一定要 和相应的配置文件中定义的名称保持一致

最后使用python3进行测试连接:
import pyodbc
conn=pyodbc.connect(‘DRIVER={FreeTDS};SERVER=ip;port=1433;DATABASE=newwind;UID=a;PWD=b’)
cursor=conn.cursor()
cursor.execute(‘select TOP 10 * from tablename’)
rs=cursor.fetchall()
print(rs)

*注意:连接语句中的DRIVER,就是上面在odbcinst.ini中配置的ODBC驱动名称.

补充
ubuntu系统下,相关包的下载地址: https://pkgs.org

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值