And*_*hev 7 python sql-server odbc pyodbc freetds
我试图连接到SQL server 2000安装在Windows server 2003从Windows Server 2008 R2使用Python 3.4和pyodbc模块.这些服务器位于不同的AD域中.Windows only在SQL Server上启用了身份验证,我无法更改它.
drv = '{SQL server}'
svr = 'sql.my-domain.local'
usr = 'my-domain.local\testuser'
pwd = 'password'
db = 'testdb'
pyodbc.connect(driver=drv, server=svr, user=usr, password=pwd, database=db)
Run Code Online (Sandbox Code Playgroud)
上面的连接失败,出现以下错误:
pyodbc.Error: ('28000', "[28000] [Microsoft][ODBC SQL Server Driver][SQLServer]
Login failed for user 'svx-iroot.local\\sqlexecutive'.
Reason: Not associated with a trusted SQL Server connection. (18452) (SQLDriverConnect)")
Run Code Online (Sandbox Code Playgroud)
有一些问题,例如这一个,建议在连接中添加trusted_connection='yes'参数以pyodbc支持Windows身份验证,但在这种情况下它没有用,因为使用此选项使用本地凭据并且我需要明确提供凭据,因为发起工作站位于不同的AD域.
使用驱动程序创建User DSNin 失败,并出现上述相同的错误.ODBC Data Source AdministratorSQL Server
有没有办法让这项工作?
同时我FreeTDS从http://sourceforge.net/projects/freetdswindows/安装了Windows驱动程序,使用tsql实用程序的连接测试确实有效:
tsql -S sql.my-domain.local -U my-domain.local\testuser -P password
Run Code Online (Sandbox Code Playgroud)
但FreeTDS司机不在ODBC Data Source Administrator.FreeTDS驱动程序传统上使用unixODBC.是否可以在Windows环境中使用此驱动程序pyodbc?
更新:
事实证明,FreeTDS上面提到的二进制文件也包括在内unixODBC.配置freetds.conf,odbc.ini并odbcinst.ini作出类似描述,例如,在这里.但在这一点上,我不知道如何pyodbc知道FreeTDS驱动程序存在.事实上,与FreeTDS驱动程序的连接尝试失败并出现以下错误:
pyodbc.Error: ('IM002', '[IM002] [Microsoft][ODBC Driver Manager]
Data source name not found and no default driver specified (0) (SQLDriverConnect)')
Run Code Online (Sandbox Code Playgroud)
Pyodbc只知道可用的驱动程序ODBC Data Source Administrator:
有两种方法可以向前推进.第一种选择是ODBC Data Source Administrator了解FreeTDS驱动程序.为了实现这一点,需要在HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\ODBC Drivers具有名称FreeTDS和值的注册表项中创建新值Installed.然后FreeTDS创建一个新密钥,HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI并FreeTDS在此注册表项中将驱动程序的设置设置为字符串值.
完成此过程后,FreeTDS驱动程序可用,ODBC Data Source Administrator但连接仍然失败.尝试创建User DSN在ODBC Data Source Administrator与FreeTDS失败,错误代码193是由64位的不相容性引起的ODBC Data Source Administrator位和32位版本FreeTDS.我没有64位版本的FreeTDS可用.可能有可能从源代码编译它.
另一个选择是pyodbc使用另一个驱动程序管理器(unixODBC)而不是ODBC Data Source Administrator.不知道如何处理.
我最终使用了pymssql版本 2.1.3,并安装了从http://www.lfd.uci.edu/~gohlke/pythonlibs/#pymssql获得的轮子。它FreeTDS包含并且开箱即用:
import pymssql
conn = pymssql.connect(
host=r'sql.my-domain.local',
user=r'my-domain.local\testuser',
password='password',
database='testdb'
)
cursor = conn.cursor()
cursor.execute('SELECT * FROM testtable')
Run Code Online (Sandbox Code Playgroud)