【发布时间】:2021-02-17 20:39:05
【问题描述】:
我正在开发 unix/rhel7 系统。我已经安装了 FreeTDS、unixODBC 和 pyodbc 的必需驱动程序。其他查询工作正常,但是当我尝试使用 TVP(表值参数)执行存储过程时,它给了我错误。有什么方法可以通过 python 使用 windows 服务帐户 连接 SQL Server?
例子:
import pyodbc;
cnxn = pyodbc.connect('DRIVER=FreeTDS;SERVER=SERVERNAME;PORT=1234;UID=USERNAME;PWD=PASSWORD;DATABASE=DBNAME')
cnxn.cursor()
param_array = []
for i in range(3):
param_array.append(['abc', 'adi', '/somepath/', '2021-01-04', 'NEW'])
result_array = cursor.execute("EXEC abc.stored_proc_name ?", [param_array]).fetchall()
cursor.commit()
cnxn.close()
错误:
pyodbc.Error: ('HY004', '[HY004] [FreeTDS][SQL Server]无效数据类型 (0) (SQLBindParameter)')
那么有没有其他方法可以从支持 TVP 的 python 连接 SQL 服务帐户?或者上面的例子有什么解决办法吗?
【问题讨论】:
-
我很确定 FreeTDS ODBC 不支持 TVP。但是微软的“ODBC Driver 17 for SQL Server”可以,而且它适用于 RHEL,所以你可以使用它。
-
“ODBC Driver 17 for SQL Server”是否需要安装 Kerberos?还是有其他方法可以做到?
-
据我所知,如果 SQL Server 实例不支持 SQL 登录(只是“Windows 身份验证”)并且客户端在 Linux 上,那么是的,“ODBC Driver 17 for SQL Server”确实需要 Kerberos .
标签: pyodbc freetds table-valued-parameters