我正在尝试使用以下设置连接到大量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秒。
我尝试了几种方法来覆盖默认超时。
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})
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列表所有线程共有的数据结构,我只是将来自多个线程的数据附加到此列表中。
我愿意接受有关单线程或多线程的任何建议。
-葛咸