Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Pyodbc在较旧版本的sql驱动程序中出现异常,但在最新版本中失败_Python_Sql Server_Pyodbc_Tls1.2 - Fatal编程技术网

Python Pyodbc在较旧版本的sql驱动程序中出现异常,但在最新版本中失败

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连接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('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')