Sqlserver连接花费的时间太长-使用Python和pyodbc

时间:2018-08-22 16:25:51

标签: sql-server python-2.x pyodbc

我正在尝试使用以下设置连接到大量sql服务器数据库(大约11,000个)。

Python-2.7

pyodbc-4.0.22

熊猫-0.23.1

(/ usr / local / etc / odbcinst.ini)中的ODBC驱动程序详细信息:

 [ODBC Driver 11 for SQL Server]

 Description=Microsoft ODBC Driver 11 for SQL Server

 Driver=/opt/microsoft/msodbcsql/lib64/libmsodbcsql-11.0.so.2270.0

 Threading=1

 UsageCount=3

 Pooling=No

 CPTimeout=0

OS:Red Hat Enterprise Linux Server版本6.10(圣地亚哥)

ODBC版本:unixODBC 2.3.0

问题:

正如我之前所说,我正在尝试使用python和pyodbc连接到大量的sql服务器数据库。我正在一个数据库一个一个地迭代。

下面是尝试连接到给定数据库的行。

sqlserver_conn = pyodbc.connect(driver=sqlserver_driver, server=sqlserver_server_ip, database=db_name, uid=sql_uid, password=sql_password)

我们的用户ID可能在远程sql服务器上可能不存在,并且如果存在,则我们可能没有实际的密码(为此,我们必须在以后生成到LOB DBA的更改/事件凭单)。 / p>

有时,即使数据库或数据库服务器出现在列表中,也存在更改,即该服务器已退休,但在CMDB中未标记为已退休。

因此,对于所有这些问题,我们得到的超时时间从60秒到300秒(取决于数据库)之间很大,这是很大的。我想覆盖此默认超时并将其设置为30秒。

我尝试了几种方法来覆盖默认超时。

  1. SQL_ATTR_CONNECTION_TIMEOUT = 113;

    sqlserver_conn = pyodbc.connect(driver=sqlserver_driver, server=sqlserver_server_ip, database=db_name, uid=sql_uid, password=sql_password, attrs_before={SQL_ATTR_CONNECTION_TIMEOUT: 30})
    
  2. sqlserver_conn = pyodbc.connect(driver=sqlserver_driver, server=sqlserver_server_ip, database=db_name, uid=sql_uid, password=sql_password, timeout=30)

但是这两个都无法做到。

浏览了pyodbc的源代码,但找不到任何相关的内容,因此寻求帮助。

有人可以帮我这个忙,并提供一种使用python中的pyodbc覆盖默认连接超时的方法吗?

注意:我什至尝试了Python中的多线程编程,但是这给了我一个错误,说“细分错误”,并且脚本以返回码139退出。我不知道为什么这么说,并且只有一个python列表所有线程共有的数据结构,我只是将来自多个线程的数据附加到此列表中。

我愿意接受有关单线程或多线程的任何建议。

-葛咸

0 个答案:

没有答案