Linux下python连接sqlserver

本文详细介绍了如何在Linux环境下利用ODBC、FreeTDS和pyodbc模块实现与MSSQL服务器的连接,包括安装ODBC、配置FreeTDS、ODBC以及使用pyodbc进行Python编程的实例。通过本文,读者能够掌握从环境搭建到数据获取的全过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


  最近需要获取一批mssql服务器上的相关数据进行分析,由于需要每天定时获取mssql的数据,并进行报警,而且平时都是在linux下工作,这可犯愁了,google发现一个类似MySQLdb的python模块叫pymssql,是用来专门链接mssql的,于是赶紧下载下来试用一番,发现一直链接失败,一定是我打开的方式不对...


于是我换了一个方案:ODBC+FreeTDS+pyodbc

试验环境:ubuntu12.04 

1 安装ODBC 

?
1
apt - get install unixodbc unixodbc - bin unixodbc - dev
2 安装pyodbc  
?
1
apt - get install python - pyodbc
3 安装FreeTDS  
?
1
apt - get install freetds - bin freetds - common freetds - dev tdsodbc

    tdsodbc为FreeTDS的关键包,含有MSSQL的驱动程序文件libtdsodbc.so,而unixodbc为Linux上的ODBC框架,含有关键二进制文件:libodbc.so或libodbc.so.1

    在前三步把相关的数据包安装完毕后,就得配置数据源了,主要是配置三个文件:/etc/odbc.ini、/etc/odbcinst.ini、/etc/freetds/freetds.conf

4 配置FreeTDS

  /etc/freetds/freetds.conf 默认freetds.conf是有内容的,下面我们追加两台mssql配置信息

?
1
2
3
4
5
6
7
8
9
10
[MQ1]
     host = jydb01.cloud - data.guol.com
     port = 1433
     tds version = 8.0
         client charset = UTF - 8
[MQ2]
         host = jydb01.cloud - stg.guol.com
         port = 1433
         tds version = 8.0
         client charset = UTF - 8
  配置参数解释:

  [MQ1]                 表示客户端链接哪台服务器,名称可以自己定义。The servername is chosen at the client's descretion.
         host           数据库服务器的地址
         port           数据库监听的端口
         tds version    使用哪个版本的TDS协议
         
client charset 设置客户端的字符集

   更详细的配置参考man freetds.conf,配置完成后就需要测试了,使用tsql命令,tsql是用来测试FreeTDS连接和请求的

?
1
tsql - S MQ1 - U dbcheck  - p 1433 - P password
 

   看到上面就表示成功啦

5 配置ODBC

  5.1 先配置/etc/odbcinst.ini文件,默认该文件是空的

?
1
2
3
4
5
6
[FreeTDS]
Description = FreeTDS
Driver = / usr / lib / x86_64 - linux - gnu / odbc / libtdsodbc.so
Setup = / usr / lib / x86_64 - linux - gnu / odbc / libtdsS.so
FileUsage = 1
client charset = utf - 8
      配置参数解释:

   [FreeTDS]    定义的驱动名称
   Description  描述信息
   Driver       库libtdsodbc.so的路径
   
Setup  

   5.2 接着配置/etc/odbc.ini文件,该文件默认是空的

?
1
2
3
4
5
6
7
8
9
10
11
12
13
[MQ1]
Driver          = FreeTDS
Server          = jydb01.cloud - data.guol.com
User            = dbcheck
TDS_Version     = 8.0
Port            = 1433
 
[MQ2]
Driver          = FreeTDS
Server          = jydb01.cloud - stg.guol.com
User            = dbcheck
TDS_Version     = 8.0
Port            = 1433

   配置参数解释:

   [MQ1]       DSN的名称,不要和FreeTDS中的混淆,两者不必一样的
   Driver      使用哪个ODBC驱动
   Server      远程服务器地址
   User        数据库用户
   TDS_Version 使用的TDS协议版本
   Port        数据库服务器端口

  5.3 测试看目前服务器有哪些ODBC驱动:

?
1
odbcinst - q - d
 

  看到以上内容就说明我明我们配置的FreeTDS成功了

   5.4 现在测试是否可以在linux下链接到mssql服务器上:

?
1
isql  MQ1 dbcheck passwd
 

   成功了...

6 使用pyodbc链接mssql

?
1
2
3
4
5
6
7
8
9
import pyodbc
import sys
 
try :
     conn = pyodbc.connect( 'DRIVER={FreeTDS};SERVER=10.22.102.11;port=1433;DATABASE=barra;UID=dbcheck;PWD=passwd;TDS_Version=8.0;' )
     print 'connect ok......'
except Exception,e:
     print e
     sys.exit()
7  以正确的方式打开   pymssql   

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import pymssql
import sys 
 
try :
     con_mssql = pymssql.connect(host = 'jydb01.cloud-data.guol.com' ,user = 'dbcheck' ,password = 'passwd' ,charset = "utf8" )
     print 'connect ok...'
except Exception,e:
     print e
     sys.exit()
cursor = con_mssql.cursor()
sql = "select count(*) from JYDB.dbo.QT  where TradingDay='2013-10-17'"
cursor.execute(sql)
data = cursor.fetchall()
print data

至此,终于可以在linux下用python连接mssql。


文章转自:http://my.oschina.net/guol/blog/182295

<think>嗯,用户问的是如何在Python连接SQL Server 2000。首先,我得考虑SQL Server 2000已经很老旧了,可能不支持现代的库。常用的库像pyodbc可能需要特定的驱动,而SQL Server 2000可能只能用旧的ODBC驱动,比如Microsoft的SQL Server ODBC Driver(可能叫SQL Server Native Client或者更早的版本)。 然后,用户可能需要安装这些旧的驱动,但可能在新系统上会有兼容性问题,比如在Windows 10或更高版本上。所以可能需要以兼容模式运行安装程序,或者寻找其他解决方案。 另外,连接字符串的构造也很重要。使用pyodbc的话,DRIVER参数需要指定正确的驱动名称,比如{SQL Server}。服务器地址、数据库名、用户名和密码这些参数要正确填写。 还有,SQL Server 2000默认可能使用1433端口,但有时可能需要确认端口是否开放,或者实例名是否正确。比如,如果使用的是命名实例,服务器地址应该是“服务器名\实例名”。 接下来,测试连接的时候可能会遇到各种错误,比如驱动未找到、登录失败、网络问题等。这时候需要逐步排查,检查驱动是否存在,验证登录凭据,确认网络可达性,以及SQL Server是否允许远程连接。 另外,如果pyodbc无法正常工作,可能需要考虑其他库,比如pymssql。不过pymssql可能也停止了对旧版SQL Server的支持,或者需要特定版本的库。比如,pymssql 2.x可能不支持,但1.x版本可能可以。 还可能涉及到启用SQL Server 2000的TCP/IP协议,因为在默认安装时可能只启用了命名管道。这需要通过SQL Server的网络配置工具来启用,并重启服务。 还有加密的问题,旧版本的SQL Server可能不支持现代的加密方式,导致SSL加密错误。这时候可能在连接字符串中添加Encrypt=no来禁用加密,或者尝试其他加密选项。 最后,用户可能需要处理字符编码的问题,特别是中文字符,可能需要指定UTF-8编码,或者在连接字符串中加入特定的参数。 总的来说,连接SQL Server 2000的步骤包括安装正确的ODBC驱动、使用合适的库(如pyodbc或pymssql)、配置正确的连接字符串、处理可能的兼容性和网络问题,以及测试连接并解决错误。</think><< Python连接SQL Server 2000可以通过ODBC驱动结合`pyodbc`库实现。由于SQL Server 2000是较旧的数据库版本,需特别注意驱动兼容性。 ### 实现步骤: ```python # 安装pyodbc库 # pip install pyodbc import pyodbc # 连接字符串配置 conn = pyodbc.connect( driver='{SQL Server}', # ODBC驱动名称 server='192.168.1.100', # 服务器IP或名称 database='YourDB', # 数据库名 uid='sa', # 用户名 pwd='password' # 密码 ) # 执行查询 cursor = conn.cursor() cursor.execute("SELECT @@version") row = cursor.fetchone() print(row[0]) cursor.close() conn.close() ``` ### 关键问题解析: 1. **驱动选择**: - SQL Server 2000需使用旧版ODBC驱动(如`SQL Server`驱动) - 若报错`Data source name not found`,表示驱动未正确安装 2. **连接参数**: ```python # 若使用命名实例 server='YourServer\\SQLEXPRESS' # 指定端口(默认1433) server='192.168.1.100,1433' ``` 3. **常见错误处理**: - **SSL加密问题**: ```python conn = pyodbc.connect(..., encrypt='no') # 禁用加密 ``` - **字符编码问题**: ```python conn.setdecoding(pyodbc.SQL_CHAR, encoding='utf-8') conn.setencoding(encoding='utf-8') ``` ### 替代方案(pymssql): ```python # 需安装pymssql 1.x版本 # pip install "pymssql<2.0.0" import pymssql conn = pymssql.connect( server='192.168.1.100', user='sa', password='password', database='YourDB', charset='utf8' ) ``` ### 注意事项: 1. Windows需安装SQL Server 2000的ODBC驱动(可能需手动下载) 2. Linux需配置FreeTDS驱动 3. SQL Server需启用TCP/IP协议(默认可能禁用) 4. 可能需要关闭防火墙或开放1433端口
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值