cammil
cammil

Reputation: 9899

Check if pyodbc connection is open or closed

I often get this error: ProgrammingError: The cursor's connection has been closed.

Is there a way to check whether the connection I am using has been closed before I attempt to execute a query?

I'm thinking of writing a wrapper to execute queries. First it would check whether the connection is closed, if it is, it would reconnect. Is this an advisable way of doing this?

Upvotes: 13

Views: 36363

Answers (3)

Diego Navarro
Diego Navarro

Reputation: 9704

You can also do duck typing. Use what you need and catch the exception. 99% of the time it is likely to be OK.

Upvotes: 1

lribinik
lribinik

Reputation: 169

Another option would be to check if you can get a cursor (many times that's what you want from a connection anyway) and re-initialize the connection otherwise. It will look something like this:

try:
    cursor = conn.cursor()
except e:
    if e.__class__ == pyodbc.ProgrammingError:        
        conn == reinit()
        cursor = conn.cursor()

Upvotes: 5

Aaron Digulla
Aaron Digulla

Reputation: 328594

The wrapper is a good idea but I don't know any API to reliably check whether the connection is closed or not.

So the solution would be something along these lines:

for retry in range(3):
    try:
        ... execute query ...
        return # Stop on success
    except e:
        if is_connection_broken_error(e):
             reconnect()
             continue
        raise

raise # throw if the retry fails too often

Upvotes: 8

Related Questions