libreria conectar python sql-server-2005 pyodbc

python - conectar - El argumento pyodbc.connect timeout se ignora para llamadas a SQL Server



sql server connector python (2)

Agregue la asignación de variable Connection.timeout a su código. El valor predeterminado es 0 (tiempo de espera desactivado), esperado en segundos.

import pyodbc import time connString = ''SERVER=dbserver;PORT=1433;DATABASE=db;UID=dbuser;PWD=dbpwd;'' + / ''DRIVER=FreeTDS'' cnxn = pyodbc.connect(connString) cnxn.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''

Estoy usando pyodbc en Linux con FreeTDS para conectarme a SQL Server 2005. He notado que mis consultas no satisfacen el argumento de tiempo de espera de mi conexión.

Cuando ejecuto lo siguiente, esperaría ver errores de tiempo de espera después de ambas llamadas a 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''

En cambio, obtengo esta salida. Indica que la primera consulta db tarda más de 7,5 segundos y la segunda llamada tarda 30 segundos sin generar un tiempo de espera excedido.

(808432.0, ) 7.56196093559 OK

¿Hay alguna forma mejor de forzar el tiempo de espera de una consulta usando pyodbc y SQL Server?


Consulte la conexión de pyodbc , hay dos parámetros de tiempo de espera por separado, una variable en la clase de conexión (esto establece el tiempo de espera para las consultas) y una palabra clave param a pyodbc.connect (y esta para el proceso de conexión real). En función de esto, está configurando el tiempo de espera para el proceso de conexión en su código y no para las consultas.