Python Pyodbc在较旧版本的sql驱动程序中出现异常,但在最新版本中失败
我正在尝试使用pyodbc连接SQL server。在这种情况下,服务器SSL3.0被禁用,TLS 1.1和1.2被启用 当我使用最旧的驱动程序{SQL Server}时。我正在处理以下异常Python Pyodbc在较旧版本的sql驱动程序中出现异常,但在最新版本中失败,python,sql-server,pyodbc,tls1.2,Python,Sql Server,Pyodbc,Tls1.2,我正在尝试使用pyodbc连接SQL server。在这种情况下,服务器SSL3.0被禁用,TLS 1.1和1.2被启用 当我使用最旧的驱动程序{SQL Server}时。我正在处理以下异常 pyodbc.connect('DRIVER={SQL Server};SERVER=XX;DATABASE=XX;UID=XX;PWD=XX;' 但是,当我使用最新的odbc驱动程序{odbc driver 17 for SQL Server}时,作为一种解决方法 pyodbc.connect('DRI
pyodbc.connect('DRIVER={SQL Server};SERVER=XX;DATABASE=XX;UID=XX;PWD=XX;'
但是,当我使用最新的odbc驱动程序{odbc driver 17 for SQL Server}时,作为一种解决方法
pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};SERVER=XX;DATABASE=XX;UID=XX;PWD=XX;'
python脚本甚至在使用基类异常处理try-catch块的情况下也会崩溃
以下是事故详情:
Problem Event Name: APPCRASH
Application Name: pythonw.exe
Application Version: 3.8.150.1013
Application Timestamp: 5da4cb37
Fault Module Name: msodbcsql17.dll
Fault Module Version: 2017.175.2.1
Fault Module Timestamp: 5e5e976f
Exception Code: c0000005
Exception Offset: 00024005
OS Version: 6.1.7601.2.1.0.272.7
Locale ID: 2057
Additional Information 1: a7aa
Additional Information 2: a7aa91f17ea749d42a4de3b390fa5b3d
Additional Information 3: a7aa
Additional Information 4: a7aa91f17ea749d42a4de3b390fa5b3d
我还通过ODBC数据源管理启用了跟踪,并发现以下跟踪:
pythonw.exe -c a40-1154 ENTER SQLSetEnvAttr
SQLHENV 0x00000000
SQLINTEGER 201 <SQL_ATTR_CONNECTION_POOLING>
SQLPOINTER 2 <SQL_CP_ONE_PER_HENV>
SQLINTEGER 4
pythonw.exe -c a40-1154 EXIT SQLSetEnvAttr with return code 0 (SQL_SUCCESS)
SQLHENV 0x00000000
SQLINTEGER 201 <SQL_ATTR_CONNECTION_POOLING>
SQLPOINTER 2 <SQL_CP_ONE_PER_HENV>
SQLINTEGER 4
pythonw.exe -c a40-1154 ENTER SQLAllocHandle
SQLSMALLINT 1 <SQL_HANDLE_ENV>
SQLHANDLE 0x00000000
SQLHANDLE * 0x047FEC6C
pythonw.exe -c a40-1154 EXIT SQLAllocHandle with return code 0 (SQL_SUCCESS)
SQLSMALLINT 1 <SQL_HANDLE_ENV>
SQLHANDLE 0x00000000
SQLHANDLE * 0x047FEC6C ( 0x029B1BE0)
pythonw.exe -c a40-1154 ENTER SQLSetEnvAttr
SQLHENV 0x029B1BE0
SQLINTEGER 200 <SQL_ATTR_ODBC_VERSION>
SQLPOINTER 3 <SQL_OV_ODBC3>
SQLINTEGER 4
pythonw.exe -c a40-1154 EXIT SQLSetEnvAttr with return code 0 (SQL_SUCCESS)
SQLHENV 0x029B1BE0
SQLINTEGER 200 <SQL_ATTR_ODBC_VERSION>
SQLPOINTER 3 <SQL_OV_ODBC3>
SQLINTEGER 4
pythonw.exe -c a40-1154 ENTER SQLAllocHandle
SQLSMALLINT 2 <SQL_HANDLE_DBC>
SQLHANDLE 0x029B1BE0
SQLHANDLE * 0x0041F4B0
pythonw.exe -c a40-1154 EXIT SQLAllocHandle with return code 0 (SQL_SUCCESS)
SQLSMALLINT 2 <SQL_HANDLE_DBC>
SQLHANDLE 0x029B1BE0
SQLHANDLE * 0x0041F4B0 ( 0x029B1C58)
pythonw.exe -c a40-1154 ENTER SQLDriverConnectW
HDBC 0x029B1C58
HWND 0x00000000
WCHAR * 0x04848B34 [ -3] "******\ 0"
SWORD -3
WCHAR * 0x04848B34
SWORD -3
SWORD * 0x00000000
UWORD 0 <SQL_DRIVER_NOPROMPT>
尝试将驱动程序参数从“SQL Server”更改为“SQL Server本机客户端11.0”。这使我成功地建立了联系
import pyodbc
conn = pyodbc.connect('DRIVER={SQL Server Native Client 11.0};SERVER=<your server name>;Trusted_Connection=yes')
导入pyodbc
conn=pyodbc.connect('DRIVER={SQLServer本机客户端11.0};Server=;Trusted_Connection=yes')
在我的例子中,“SQL Server”驱动程序参数在某些机器上工作,但在其他机器上不工作。我怀疑这是服务器端的TLS禁用问题,因为其他机器可以连接到pyodbc。我很好奇是否有人知道可能的原因。尝试将驱动程序参数从“SQL Server”更改为“SQL Server本机客户端11.0”。这使我成功地建立了联系
import pyodbc
conn = pyodbc.connect('DRIVER={SQL Server Native Client 11.0};SERVER=<your server name>;Trusted_Connection=yes')
导入pyodbc
conn=pyodbc.connect('DRIVER={SQLServer本机客户端11.0};Server=;Trusted_Connection=yes')
在我的例子中,“SQL Server”驱动程序参数在某些机器上工作,但在其他机器上不工作。我怀疑这是服务器端的TLS禁用问题,因为其他机器可以连接到pyodbc。我很好奇是否有人知道可能是什么原因。你能发布完整的回溯吗?@JustinEzequiel我在空闲时运行了它。用我在crashGo to ODBC Data Source Administrator中看到的消息编辑了这个问题,单击Drivers选项卡并滚动到底部。不要在连接字符串中使用
SQL Server
,而是使用列出的最新SQL驱动程序,例如:SQL Server Native Client 11.0
。是否可以从命令提示符/终端运行脚本?这样我们就可以排除idle的问题。最新的驱动程序是{ODBC driver 17 for SQL Server},它出现在驱动程序部分中。而这正是它失败的原因。好的,我试着运行CMD,你能发布完整的回溯吗?@JustinEzequiel我已经在空闲状态下运行了。用我在crashGo to ODBC Data Source Administrator中看到的消息编辑了这个问题,单击Drivers选项卡并滚动到底部。不要在连接字符串中使用SQL Server
,而是使用列出的最新SQL驱动程序,例如:SQL Server Native Client 11.0
。是否可以从命令提示符/终端运行脚本?这样我们就可以排除idle的问题。最新的驱动程序是{ODBC driver 17 for SQL Server},它出现在驱动程序部分中。而这正是它失败的原因。好的,我试着运行cmd
import pyodbc
conn = pyodbc.connect('DRIVER={SQL Server Native Client 11.0};SERVER=<your server name>;Trusted_Connection=yes')