używam pyodbc na Linuksie z FreeTDS do łączenia się z SQL Server 2005. Zauważyłem, że argument limit czasu na moje połączenie nie jest honorowane przez moich zapytaniami.pyodbc.connect Timeout argumentem jest ignorowany dla połączeń z serwerem SQL
Po uruchomieniu poniższej części spodziewałbym się błędów limitu czasu po obu wywołaniach cursor.execute.
import pyodbc
import time
connString = 'SERVER=dbserver;PORT=1433;DATABASE=db;UID=dbuser;PWD=dbpwd;' + \
'DRIVER=FreeTDS'
cnxn = pyodbc.connect(connString , timeout=3)
cursor = cnxn.cursor()
t1 = time.time()
cursor.execute("SELECT MAX(Qty) FROM big_table WHERE ID<10000005")
print cursor.fetchone()
t2 = time.time()
print t2-t1
cursor.execute("WAITFOR DELAY '00:00:30'")
print 'OK'
Zamiast uzyskać ten wynik. Wskazuje, że pierwsze zapytanie db trwa ponad 7,5 sekundy, a drugie wywołanie trwa 30 sekund bez przekroczenia limitu czasu.
(808432.0,)
7.56196093559
OK
Czy istnieje lepszy sposób na wymuszenie limitu czasu zapytania przy użyciu pyodbc i SQL Server?
Chociaż ja zaakceptowane odpowiedź cravori poprzez precendence, dajesz ten sam roztwór o bardziej szczegółowe wyjaśnienia. Dziękuję za to. – ChrisGuest
@ChrisGuest Understood. Zmienna "timeout" jest dla mnie również nową informacją i nie od razu było dla mnie jasne, co należy zrobić, aby z niej skorzystać. Mam nadzieję, że to pomoże tym, którzy przez niego biegną i są gęste jak ja :-) – Bryan