python - pyodbc 连接到在 docker 容器上运行的 MS SQL Server

标签 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 连接时,数据库详细信息完全相同。

最佳答案

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

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 .

关于python - pyodbc 连接到在 docker 容器上运行的 MS SQL Server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52968780/

相关文章:

python - pylint 错误 - 使用@property + @foo.setter 时出现 E1101 和 E0102

sql - 将文本转换为 xml 错误非法限定名称字符

c# - 使用 C# 进行 SQL Server 备份

python - 使用 SQLAlchemy 执行将 varchar 转换为日期时间时出现问题

python - 登录obiee并使用python执行SQL

python - 将列表附加到结果列表会不断替换最后一个附加的列表

python - 为多个属性定义@property 的函数

python - 将某些功能拆分为函数、模块和包的推荐方法?

mysql - 如何将 mysql 查询转换为事务 SQL 查询

python - pyodbc.ProgrammingError : ('The SQL contains 0 parameter markers, but 3 parameters were supplied' , 'HY000' )