目标:通过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.
尝试过的事情:
设置: 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
注释:
如果您有什么想法可以解决该连接问题,将不胜感激。谢谢!
答案 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连接;那不是错字!