Ubuntu12.10下Python(pyodbc)访问SQL Server解决方案

一、基本原理

请查看这个网址,讲得灰常详细: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          = 1433
TDS_Version          = 7.1

[my_data]一行意为开始定义一个名叫my_data的数据源。Driver属性指定的名字是预定义好的TDS驱动,其他是一些数据库的相关属性,如服务器地址,端口等。

现在把tds.datasource.template文件里定义的数据源安装到系统的ODBC数据源中,执行下面的命令:

sudo odbcinst -i -s -l -f 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 1433
locale is "zh_CN.UTF-8"
locale charset is "UTF-8"
using default charset "UTF-8"
1>

如果出现以上类似画面,就说明连接成功了。

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开启远程连接,具体操作请看:http://blog.csdn.net/lzy_1515/article/details/6868143

本文参考文章包括:

http://www.blogwind.com/Wuvist/74789.shtml

http://blog.csdn.net/gzlaiyonghao/article/details/3838967

http://sunnet.blog.sohu.com/203379478.html

http://blog.csdn.net/dlutxie/article/details/6851429

http://www.jeffkit.info/2010/01/476/

http://my.oschina.net/zhengyijie/blog/35587

Ubuntu12.10下Python(pyodbc)访问SQL Server解决方案

时间: 2024-10-12 15:50:24

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

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

第一步:下载安装cx_Oracle 下载地址:http://sourceforge.net/projects/cx-oracle/files/5.1.2/,下载cx_Oracle的rmp安装文件,注意下载版本最好和Oracle.Python环境保持一致,我当前的环境是Oracle 11g和Python2.7,因此下载的是cx_Oracle-5.1.2-11g-py27-1.x86_64.rpm. 不需按RPM方式去安装,直接解压从中取出cx_Oracle.so文件(只需要这个),复制到Pytho

NodeJS下访问SQL Server

1.下载node-sqlserver(msnodesql-0.2.1-v0.8-x64.msi) msnodesql 下载地址:下载  自行选择与自己系统相符的版本,点击安装. msnodesql 官方地址:https://github.com/WindowsAzure/node-sqlserver 含wiki 和 疑问解答 . 2.打开msnodesql 文件夹下的README.md文件,里面有说到要安装的东西. 3.安装node-gyp,打开命令行,输入命令: npm install -g

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

Go语言通过ODBC 访问SQL server,这里需要用到go-odbc库,开源地址::https://github.com/weigj/go-odbc 一.驱动安装 在cmd中打开GOPATH: 转到src目录 在src目录通过git获取odbc驱动: git clone git://github.com/weigj/go-odbc.git odbc 转到odbc目录: 运行go install命令: 提示未安装 gcc 编译程序,到官方网站下载http://tdm-gcc.tdragon.

mod_wsgi + pymssql访问SQL Server阻塞

在通过pymssql访问SQL Server时,直接在python中运行没有问题,在通过mod_wsgi和Apache进行部署时,发现所有请求都hang再数据库查询. 通过google查到了答案,感谢google,详细描述请见:https://code.google.com/p/modwsgi/wiki/ApplicationIssues#Python_Simplified_GIL_State_API 简要说一下,mod_wsgi针对每个virtual host和app mount point创

分析下自己写的SQL Server同步工具的性能和缺陷

分析下自己写的SQL Server同步工具的性能和缺陷 1. C#同步SQL Server数据库Schema 2. C#同步SQL Server数据库中的数据--数据库同步工具[同步新数据] 通过测试我写的同步程序,得出结论: 1.程序第一次调用SQLBulkCopy会耗时较长 2.同步程序放在目标机器在耗时方面相对少些 测试数据: declare @varI varchar(200) set @varI=0 while(@varI<100000) begin set @[email prote

原生的ado.net(访问sql server数据库)

本文介绍原生的ado.net(访问sql server数据库) 写在前面 数据库连接字符串 过时的写法 string str = "server=localhost;database=my_db;uid=sa;pwd=123"; 主流的写法 sql验证写法 string str = "Data Source=localhost;Initial Catalog=my_db;User ID=sa;Password=123"; windows验证写法 string str

.NET跨平台之旅:升级至ASP.NET 5 RC1,Linux上访问SQL Server数据库

今天微软正式发布了ASP.NET 5 RC1(详见Announcing ASP.NET 5 Release Candidate 1),.NET跨平台迈出了关键一步. 紧跟这次RC1的发布,我们成功地将运行在Linux上的示例站点(http://about.cnblogs.com)升级到了ASP.NET 5 RC1,并且增加了数据库访问功能——基于Entity Framework 7 RC1访问SQL Server数据库. 示例站点页面左侧的导航是从数据库读取数据动态加载的,数据库服务器用的是阿里

访问SQL Server WMI对象

访问SQL Server WMI对象 1. 使用Powershell访问 get-wmiobject -list -namespace "root\Microsoft\SqlServer" get-wmiobject -list -namespace "root\Microsoft\SqlServer\ServerEvents\MSSQLSERVER" get-wmiobject -namespace "root\Microsoft\SqlServer\C

Oracle Gateways透明网关访问SQL Server

自己的本机安装了Oracle 12c,公司的平台需要同时支持Oracle与SQL Server,很多时候都有将数据从Oracle同步到SQL Server的需求.通过SQL Server的link Server可以达到目的,但是因为SQL Server都是64位版本,试过很多次都失败了.再安装32位SQL Server也懒得折腾.因Oracle是12c, 安装的Gateways也是12c.尝试过在Oracle数据库服务器(本机)安装11g的gateways, 但是配置都失败了.    Oracl