与docker容器上运行的MS SQL Server的pyodbc连接

时间:2018-10-24 12:15:18

标签: python sql-server pyodbc freetds

尝试通过指定驱动程序进行连接时,

pyodbc似乎无法连接。我可以连接以设置DSN,但我也想在用户获得驱动程序,服务器,UID,PWD和数据库详细信息时进行连接。

我在Mac上并使用FreeTDS驱动程序。

freetds.conf

[MYMSSQL]
host = 0.0.0.0
port = 1433
tds version = 7.3

odbcinst.ini

[FreeTDS]
Description=FreeTDS Driver for Linux & MSSQL
Driver=/usr/local/lib/libtdsodbc.so
Setup=/usr/local/lib/libtdsodbc.so
UsageCount=10

这是我尝试连接的方式:

conn_str = "DRIVER=FreeTDS;SERVER={0};UID={1};PWD={2};DATABASE={3}".format('MYMSSQL', 'sa', 'password','tempdb')
conn = pyodbc.connect(conn_str)

我得到的错误是:

pyodbc.OperationalError: ('08001', '[08001] [FreeTDS][SQL Server]Unable to connect to data source (0) (SQLDriverConnect)')

当我尝试通过DSN连接时,完全相同的数据库详细信息起作用。

1 个答案:

答案 0 :(得分:1)

如果您有一个freetds.conf文件,其中包含主机名/ IP和端口,例如

gord@xubuntu64-nbk1:~$ cat /etc/freetds/freetds.conf 
[myFreeTdsHost]
    host = 192.168.0.179
    port = 49242

然后,您只需指定SERVERNAME=

,即可在无DSN的连接字符串中使用这两个值
# get host name/IP and port from freetds.conf
cnxn_str = (
    'DRIVER=FreeTDS_ODBC;'
    'SERVERNAME=myFreeTdsHost;'
    'DATABASE=myDb;'
    'UID=sa;PWD=_whatever_;'
)

您也可以像这样直接通过SERVER=PORT=提供主机名/ IP和端口

# supply host name/IP and port directly (bypassing freetds.conf)
cnxn_str = (
    'DRIVER=FreeTDS_ODBC;'
    'SERVER=192.168.0.179;'
    'PORT=49242;'
    'DATABASE=myDb;'
    'UID=sa;PWD=_whatever_;'
)

有关详细信息,请参见FreeTDS文档here