There have been some request to have some reconnect possibilities in Connector/Python. I’m wondering now whether there should be some automatic reconnect on certain errors within the database driver.
My personal feeling is to have no automatic reconnect within Connector/Python and the programmer has to come up with retrying transactions herself.
For example:
cnx.disconnect() # For testing..
tries = 2
while tries > 0:
tries -= 1
try:
cursor.execute("INSERT INTO t1 (c1) VALUES ('ham')")
cnx.commit()
except mysql.connector.InterfaceError:
if tries == 0:
print "Failed inserting data after retrying"
break
else:
print "Reconnecting.."
cnx.reconnect()
else:
break
The above mimics how you would handle transactions and trying them reconnecting. I have ideas how to get this into Connector/Python, but it would not really fit PEP-249.
Would the above use case of reconnecting be enough?
Comments
The auto-reconnection should be useful only if it where able to redo a failed query, reopening the connection and doing the same query/transaction failed.
But in addition to transaction boundaries, there are many other circumstances to keep in mind like the connection encoding, various timeouts, and potentially any other MySQL session o global parameter that can be changed at runtime after the connection was established. In which state would you reopen the connection in those cases?
Another particular case should be if the server parameters are changed from the first connection… the code maybe check those settings while connecting, the auto-reconnection can’t do it with the same logic the application does.
For those reasons for me too the aut.oreconnection should not be implemented.
“Would the above use case of reconnecting be enough?”
So, let me get this straight… your proposed solution is for me to back and wrap every one of my cursor.execute() statments with the 14 extra lines you’ve suggested?