以下作品:
import pyodbc
pyodbc.connect('DRIVER={FreeTDS};Server=my.db.server;Database=mydb;UID=myuser;PWD=mypwd;TDS_Version=8.0;Port=1433;')
Run Code Online (Sandbox Code Playgroud)
以下失败:
import sqlalchemy
sqlalchemy.create_engine("mssql://myuser:mypwd@my.db.server:1433/mydb?driver=FreeTDS& odbc_options='TDS_Version=8.0'").connect()
Run Code Online (Sandbox Code Playgroud)
上面的错误消息是:
DBAPIError :(错误)('08001','[08001] [unixODBC] [FreeTDS] [SQL Server]无法连接到数据源(0)(SQLDriverConnectW)')无无
有人可以指点我正确的方向吗?有没有办法告诉sqlalchemy将特定的连接字符串传递给pyodbc?
请注意:我希望保持此DSN-less.
pymssql模块用于支持Windows身份验证.现在看来它没有.虽然在某些地方它仍然表明它应该工作.我一直无法找到这个问题的明确答案,也无法找到解决方案.最相关的链接:
https://groups.google.com/forum/#!topic/pymssql/QDMLTGBNeU0
pymssql 1.0支持它,因为它使用并依赖于MS提供的DLL,它是SQL Server客户端堆栈的一部分.该堆栈负责处理所有NTLM协商等.这意味着它是一个仅限Windows的解决方案.
我可以模拟许多种网络环境,所以我尝试了很多不同的设置.我试图能够使用此脚本使用Windows身份验证连接到远程MSSQL服务器.这就是问题所在.
根据我的研究,包括上面的链接,也有使用Windows身份验证与被该pymssql模块两种方式应该工作.
第一种方法:使用当前用户凭据:
pymssql.connect(server='server')
# credentials come from active windows session
# some research shows that a "trusted=True" keyword should be provided.
Run Code Online (Sandbox Code Playgroud)
第二种方法:使用给定的用户凭据:
pymssql.connect(server='server', user=r'domain\user', password='pass')
# credentials are given in code and somehow converted to a
# windows authentication in the background
# some research shows that a "trusted=True" keyword should be provided.
Run Code Online (Sandbox Code Playgroud)
使用该_mssql模块也是如此.
笔记:
关于该主题的其他问题: …