在Mac上使用isql和python连接到远程MSSQL 2016吗?

时间:2019-12-06 17:11:06

标签: python macos tsql pyodbc freetds

目标:通过Python连接到远程MSSQL 2016服务器。

主要方法::紧随https://github.com/mkleehammer/pyodbc/wiki/Connecting-to-SQL-Server-from-Mac-OSX中的教程。

问题::可以通过tsql连接,但是isql无法正常工作。错误

[S1000][unixODBC][FreeTDS][SQL Server]Unable to connect to data source
[37000][unixODBC][FreeTDS][SQL Server]Login failed for user 'DOMAIN\user-p'
[37000][unixODBC][FreeTDS][SQL Server]Cannot open database "TIT_BI_OPERATIONS" requested by the login. The login failed.

尝试过的事情:

  1. 不同的ODBC驱动程序13.1、17,FreeTDS
  2. 在用户名中包含/排除转义符。
  3. 主机名与主机IP。

设置: odbc.ini

[ODS_DSN]
Description = Connection to ODS MS_SQL 2016
Driver = FreeTDS
Servername = ODS_DSN
Port = 40000
Database = TIT_BI_OPERATIONS

odbcinst.ini

[FreeTDS]
Driver=/usr/local/lib/libtdsodbc.so
Setup=/usr/local/lib/libtdsodbc.so
UsageCount=1

freetds.conf

[ODS_DSN]
host = 164.10.17.77
port = 40000
tds version = 7.4
client charset = UTF-8

注释:

  • 尽管如此,如果不先通过tsql和isql进行连接就运行python并不是很有希望,但我仍然没有成功。使用pyodbc,pypodbc,sqlalchemy。
  • 以下形式的大多数错误:用户“ DOMAIN \ user-p”的登录失败
  • 对于ODBC驱动程序13:无法打开lib'/usr/local/lib/libmsodbcsql.13.dylib'
  • 我能够使用完全相同的凭据通过SQL PRO STUDIO进行连接。

如果您有什么想法可以解决该连接问题,将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:1)

如果您使用Windows域身份验证,则必须使用FreeTDS。奇怪的是,Microsoft ODBC驱动程序不支持Windows域身份验证,仅FreeTDS不支持。

由于您可以使用tsql命令进行连接,所以这意味着FreeTDS正在工作。我建议直接从Python直接连接。尝试这样的连接字符串:

import pyodbc

con = pyodbc.connect(
    r"DRIVER={FreeTDS};"
    r"SERVER=164.10.17.77;"
    r"PORT=40000;"
    r"DATABASE=TIT_BI_OPERATIONS;"
    f"UID=DOMAIN\\user-p;"
    f"PWD=yourpassword;"
    r"TDS_Version=7.3;"
)

cursor = con.cursor();

cursor.execute("SELECT 'this' AS that")

for row in cursor.fetchall():
    print(row)

请注意,在UID字段中确实需要两个反斜杠才能与Windows域auth连接;那不是错字!