title: How to check if a MySQL connection is open in Python?
body: <p>I am using MySQLdb (<a href="http://mysql-python.sourceforge.net/" rel="noreferrer">http://mysql-python.sourceforge.net/</a>). It seems that connection.open and connection.sqlstate() do not work for me. Below is the code:</p>
  
  <pre><code>def open(self):
      #TODO: check the connection's status
      # self.__conn.open OR self.__conn.sqlstate()
      try:
          print "sqlstate:"+str( self.__conn.sqlstate() )
          print "open?"+str( self.__conn.open )
          return "00000" == self.__conn.sqlstate()
      except Exception as e:
          print "Exception while checking MYSQL Connection:"+str(e) 
          return False
  </code></pre>
  
  <p>But when I ran "sudo service mysql stop; sleep 60; sudo service mysql start;" to do the testing. The output is as following. It seems that the following piece of output repeated for ever (I killed the process finally). When the server is down, connection.open is 1 and connection.sqlstate() is 00000. But when server is up, connection.executemany() still throw exceptions. Any ideas? Thanks.</p>
  
  <pre><code>...
      2015-10-20 14:09:06 Exception while executing statement:(2006, 'MySQL server has gone away')
      2015-10-20 14:09:06 sqlstate:00000
      2015-10-20 14:09:06 open?1
      2015-10-20 14:09:06 Reconnected to MYSQL.
      2015-10-20 14:09:06 Exception while executing statement:(2006, 'MySQL server has gone away')
      2015-10-20 14:09:06 sqlstate:00000
      2015-10-20 14:09:06 open?1
      2015-10-20 14:09:06 Reconnected to MYSQL.
      2015-10-20 14:09:06 Exception while executing statement:(2006, 'MySQL server has gone away')
      2015-10-20 14:09:06 sqlstate:00000
      2015-10-20 14:09:06 open?1
      2015-10-20 14:09:06 Reconnected to MYSQL.
      2015-10-20 14:09:06 Exception while executing statement:(2006, 'MySQL server has gone away')
      2015-10-20 14:09:06 sqlstate:00000
      2015-10-20 14:09:06 open?1
  ...
  </code></pre>
  
  <p><strong>UPDATE</strong></p>
  
  <p>I tested again. The output is as following. each sleep is 10 seconds. The output is OK except the connection.open is 1 even when server is down. But connection.sqlstate() is right (HY000).</p>
  
  <pre><code> 2015-10-20 14:35:56 Exception while executing statement:(2006, 'MySQL server has gone away')
  2015-10-20 14:35:56 Exception while ping:(2003, "Can't connect to MySQL server on '10.1.1.25' (111)")
  2015-10-20 14:35:56 sqlstate:HY000
  2015-10-20 14:35:56 open?1
  2015-10-20 14:35:56 sleeping...
  2015-10-20 14:36:06 Exception while ping:(2003, "Can't connect to MySQL server on '10.1.1.25' (111)")
  2015-10-20 14:36:06 sqlstate:HY000
  2015-10-20 14:36:06 open?1
  2015-10-20 14:36:06 sleeping...
  2015-10-20 14:36:16 Exception while ping:(2003, "Can't connect to MySQL server on '10.1.1.25' (111)")
  2015-10-20 14:36:16 sqlstate:HY000
  2015-10-20 14:36:16 open?1
  2015-10-20 14:36:16 sleeping...
  2015-10-20 14:36:26 Exception while ping:(2003, "Can't connect to MySQL server on '10.1.1.25' (111)")
  2015-10-20 14:36:26 sqlstate:HY000
  2015-10-20 14:36:26 open?1
  2015-10-20 14:36:26 sleeping...
  2015-10-20 14:36:36 Exception while ping:(2003, "Can't connect to MySQL server on '10.1.1.25' (111)")
  2015-10-20 14:36:36 sqlstate:HY000
  2015-10-20 14:36:36 open?1
  2015-10-20 14:36:36 sleeping...
  2015-10-20 14:36:46 Exception while ping:(2003, "Can't connect to MySQL server on '10.1.1.25' (111)")
  2015-10-20 14:36:46 sqlstate:HY000
  2015-10-20 14:36:46 open?1
  2015-10-20 14:36:46 sleeping...
  2015-10-20 14:36:56 Exception while ping:(2003, "Can't connect to MySQL server on '10.1.1.25' (111)")
  2015-10-20 14:36:56 sqlstate:HY000
  2015-10-20 14:36:56 open?1
  2015-10-20 14:36:56 sleeping...
  2015-10-20 14:37:06 sqlstate:00000
  2015-10-20 14:37:06 open?1
  2015-10-20 14:37:06 Reconnected to MYSQL.
  </code></pre>