一、基本原理
请查看这个网址,讲得灰常详细:http://www.jeffkit.info/2010/01/476/
 
二、实现步骤
1、安装linux下SQL Server的驱动程序
安装Freetds,不要使用apt-get install 来安装,因为源里的版本不一定是新的,建议使用stable版本, 下载源码手工编译安装,因为有好些参数需要在编译中指定的。
执行以下命令:
tar zfvx freetds-stable.tgz
cd freetds-*
./configure --prefix=/usr/local/freetds --with-tdsver=7.1 --enable-msdblib
make
sudo make install(注意是root)
Freetds已经安装成功了;再安装一个小工具freetds-bin,用来测试连接数据库:
apt-get freetds-bin
安装完毕后,可以使用tsql命令来进行测试SQL Server数据库连接:
tsql –H mssql-server-ip –U username –P password
出现 1> 提示符就是成功啦
 
2、安装linux下的ODBC驱动管理程序
安装unixODBC,让linux下的应用程序可以通过ODBC来访问数据源。我们需要分别安装unixodbc,unixodbc-dev,unixodbc-bin(可选),tdsodbc
apt-get install unixodbc unixodbc-dev  unixodbc-bin tdsodbc
ODBC驱动管理器通过配置文件管理数据库驱动和数据源,分别有数据库驱动的配置文件和数据源的配置文件odbcinst.ini和odbc.ini,其所在的位置可能会因操作系统和安装方式而异,不过可以使用odbcinst -j命令来查看。

这两个文件是没有内容的,现在我们要做的就是配置数据驱动以及数据源。配置ODBC的时候,我们可以直接往两个配置里面增加内容,但这种方式不推荐,而推荐使用odbcinst命令来安装驱动信息和数据源信息。
 
配置数据驱动
首先,创建一个tds.driver.template的文件,输入以下内容并保存:
[TDS]
Description = FreeTDS Driver for Linux & MSSQL on Win32
Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so
Setup = /usr/lib/x86_64-linux-gnu/odbc/libtdsS.so

[TDS]这一行意为开始定义一个名叫TDS的数据库驱动,下面是这个数据库的相关属性,请检查一下,Driver和Setup所指的两个lib文件是否存在或路径是否正确,如果不存在,要好好检查一下这一步的安装工作有没到位啦,现在把tds.driver.template里定义的数据库驱动安装到系统的ODBC驱动库,执行如下命令:

sudo odbcinst -i -d -f tds.driver.template
-i 表示install,安装
-d 表示driver,所安装的是驱动 
-f 表示file,指定要安装的文件
 
配置数据源
接下来,创建一个tds.datasource.template文件,输入以下内容并保存:
[my_data]
Description = Connection to windows virtual machine
Driver = TDS
Trace = No
Database = p10
Server = 192.168.88.200
Port =
TDS_Version = 7.1
[my_data]一行意为开始定义一个名叫my_data的数据源。Driver属性指定的名字是预定义好的TDS驱动,其他是一些数据库的相关属性,如服务器地址,端口等。
现在把tds.datasource.template文件里定义的数据源安装到系统的ODBC数据源中,执行下面的命令: 
sudo odbcinst -i -s -l -f /etc/tds.datasource.template
-i 表示install,安装
-s 表示source,所安装的是数据源
-l 表示把数据源安装到系统的全局数据源配置文件,用-h则是安装到用户的数据源配置文件中
-f 表示file,指定要安装的文件
 
驱动和数据源配置完毕,现在来测试通过ODBC访问SQL Server,使用unixODBC自带的isql命令,使用格式为: isql 数据源名 用户名 密码
sudo isql my_data sa password
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL>
如果你看到上面类似的画面,说明ODBC和SQL Server现在沟通得很好,这时你可以在SQL>提示符下输入Sql语句试试了,哈哈~
 
3、安装odbc协议的python实现–pyodbc
如果你的机器已经成功安装了pip,那直接用以下命令安装:
sudo pip install pyodbc
安装成功后,可以测试一下:
python
>>import pyodbc
>> conn=pyodbc.connect('DSN=数据源名;UID=用户名;PWD=密码')
更多关于pyodbc的使用可看此网址:http://my.oschina.net/zhengyijie/blog/35587
 
如果想指定连接哪个数据库的话,可以修改配置文件odbc.ini,把Database的值留空,使用时即可指定数据库,用法如下:
conn=pyodbc.connect('DSN=数据源名;DATABASE=数据库名;UID=用户名;PWD=密码')
三、使用方法
1、通过freetds测试连接SQL Server
使用freetds的小工具freetds-bin,使用tsql命令,使用格式为:tsql –H mssql-server-ip –U username –P password -p port
tsql –H 192.168.88.146 –U sa –P dingjia -p
locale is "zh_CN.UTF-8"
locale charset is "UTF-8"
using default charset "UTF-8"
>
如果出现以上类似画面,就说明连接成功了。
 
2、通过ODBC访问SQL Server
使用unixODBC自带的isql命令,使用格式为: isql 数据源名 用户名 密码
sudo isql my_data sa password
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL>
如果你看到上面类似的画面,说明ODBC和SQL Server现在沟通得很好,这时你可以在SQL>提示符下输入Sql语句试试了,哈哈~
 
3、通过Pyodbc连接SQL Server
使用格式:conn=pyodbc.connect('DSN=数据源名;DATABASE=数据库名;UID=用户名;PWD=密码')
python
>>import pyodbc
>> conn=pyodbc.connect('DSN=数据源名;UID=用户名;PWD=密码')

如果想指定连接哪个数据库的话,可以修改配置文件odbc.ini,把Database的值留空,使用时即可指定数据库。

在方法2、3中,可通过修改/etc/odbc.ini文件的内容来访问不同的SQL Server数据源。
 
四、开启SQL Server远程连接
以上环境配置好之后,要成功访问SQL Server,那必须要该SQL Server开启远程连接,具体操作请看:
 
本文参考文章包括:

Ubuntu12.10下Python(pyodbc)访问SQL Server解决方案的更多相关文章

  1. Ubuntu12.10下Python(cx_Oracle)访问Oracle解决方案

    第一步:下载安装cx_Oracle 下载地址:http://sourceforge.net/projects/cx-oracle/files/5.1.2/,下载cx_Oracle的rmp安装文件,注意 ...

  2. ORACLE透明网关访问SQL Server配置总结

      透明网关概念 ORACLE透明网关(Oracle Transparent Gateway)可以解决ORACLE数据库和非ORACLE数据库交互数据的需求.在一个异构的分布式环境中,通过ORACLE ...

  3. 一次php访问sql server 2008的API接口的采坑

    2018年6月21日17:17:09,注意:不是详细文档,新手可能会看不懂 windows下安装 项目是sql server 2008的k3,php连接数据库写的API,因为是买的时候是别人的程序,测 ...

  4. ASP调用存储过程访问SQL Server

     ASP调用存储过程访问SQL Server 2011-02-15 10:22:57 标签:asp 数据库 sQL 存储过程 Server ASP和存储过程(Stored Procedures)的文章 ...

  5. ODBC database driver for Go:Go语言通过ODBC 访问SQL server

    Go语言通过ODBC 访问SQL server,这里需要用到go-odbc库,开源地址::https://github.com/weigj/go-odbc 一.驱动安装 在cmd中打开GOPATH: ...

  6. EF 数据库连接字符串-集成安全性访问 SQL Server

    使用 Windows 集成安全性访问 SQL Server 如果您的应用程序运行在基于 Windows 的 Intranet 上,则也许可以将 Windows 集成身份验证用于数据库访问.集成安全性使 ...

  7. 在Win8.1系统下如何安装运行SQL Server 2005 (以及安装SQL Server 2005 Express打补丁)

    在Win8.1系统下SQL Server 2005 安装失败怎么办? 需要替换两个文件及打sqlserver sp4补丁. 以下是操作过程. 按正常情况,在Win8/Win8.1系统下安装微软的SQL ...

  8. 在oracle中通过链接服务器(dblink)访问sql server

    在oracle中通过链接服务器(dblink)访问sql server 2013-10-16 一.   工作环境: <1> Oracle数据库版本:Oracle 11g  运行环境 :IB ...

  9. Linux下用freetds执行SQL Server的sql语句和存储过程

    Linux下用freetds执行SQL Server的sql语句和存储过程 http://www.linuxidc.com/Linux/2012-06/61617.htm freetds相关 http ...

随机推荐

  1. [转]Python的getattr(),setattr(),delattr(),hasattr()

    getattr()函数是Python自省的核心函数,具体使用大体如下: 获取对象引用getattrGetattr用于返回一个对象属性,或者方法 class A: def __init__(self): ...

  2. MySQL 5.7.17 Windows安装和启动

    1.在官网http://dev.mysql.com/downloads/下载 MySQL Community Server 2.解压后是这个样子(5.7.18解压后没有my-default.ini文件 ...

  3. 用 profvis 进行性能分析

    Rprof( ) 函数提供了有用的信息帮助我们找到代码瓶颈,进而提升代码性能.RStudio 也发布了一个增强版的分析工具 profvis( ),它还提供了用于分析 R 代码的交互式可视化功能(htt ...

  4. spring boot: 热部署(一) run as – java application (spring-loader-1.2.4.RELEASE.jar)

    spring boot: 热部署(一) run as – java application (spring-loader-1.2.4.RELEASE.jar) 如果使用的run as – java a ...

  5. C#用大石头Xcode做数据底层注意事项

    1.记得添加XCode.dll 和NewLife.Core.dll 2.记得把程序的框架改为 .net Framework4

  6. Ubuntu上识别不到安卓设备或者显示出“????”,提示No Permission

    一:Ubuntu上识别不到安卓设备 1.lsusb找到设备的Vendor ID 2.cd ~/.android 3.vim adb_usb.ini 4.把设备的VendorID添加进来,如设备ID为2 ...

  7. HDU - 4812 D Tree 点分治

    http://acm.hdu.edu.cn/showproblem.php?pid=4812 题意:有一棵树,每个点有一个权值要求找最小的一对点,路径上的乘积mod1e6+3为k 题解:点分治,挨个把 ...

  8. Java网络编程和NIO详解6:Linux epoll实现原理详解

    Java网络编程和NIO详解6:Linux epoll实现原理详解 本系列文章首发于我的个人博客:https://h2pl.github.io/ 欢迎阅览我的CSDN专栏:Java网络编程和NIO h ...

  9. UVA-1614 Hell on the Markets(贪心+推理) (有待补充)

    题目大意:一个整数序列a,1≤a[i]≤i.问能否通过在一些元素前加上负号,使得整个序列和为0. 题目分析:贪心.贪心策略:每次都先选最大的元素加负号(或保留,不加负号). 贪心依据:对于1≤a[i] ...

  10. java基础---->Zip压缩的使用

    java中提供了对压缩格式的数据流的读写.它们封装到现成的IO 类中,以提供压缩功能.下面我们开始java中压缩文件的使用. 目录导航: 关于压缩的简要说明 GZIP压缩文件的使用 ZIP压缩文件的使 ...