2012-07-31 16 views
6

Estoy accediendo a una base de datos MySQL desde python a través de la biblioteca MySQLdb. Estoy intentando probar la conexión de la base de datos como se muestra a continuación.¿Cómo probar la conectividad de la base de datos en python?

db = MySQLdb.connect(self.server, self.user, 
        self.passwd, self.schema) 
cursor = db.cursor()   
try: 
    cursor.execute("SELECT VERSION()") 
    results = cursor.fetchone() 
    ver = results[0] 
    if (ver is None): 
     return False 
    else: 
     return True    
except: 
    print "ERROR IN CONNECTION" 
    return False 

¿Es esta la manera correcta de probar la conectividad cuando se escriben las pruebas de unidad? Si hay una mejor manera, por favor ilumina!

+0

corrigió el error en el código. ¿Necesita saber si esta es una forma correcta de probar? – Nemo

+0

* ¿Por qué * quieres * probar * la conectividad? ¿Qué haces si la prueba falla? –

+0

Estoy escribiendo unidades de prueba para los métodos de acceso db. Así que quiero eliminar el caso cuando falla el acceso a la base de datos. – Nemo

Respuesta

1

Sí. Me parece bien.

Mis preferencias personales:

  • realidad una excepción si no hay conexión
  • sólo tiene que fetchone, la prueba para Nada es superfluo (a menos que esté dispuesto a hacer cumplir una versión mínima de la base de datos)
+0

No entendí por qué es superfluo. ¿Podría explicar o señalar cómo habría codificado esto? – Nemo

+0

"resultados" serán ninguno cuando no haya conexión. Probablemente obtendrá alguna otra excepción tratando de hacer "resultados [0]" cuando es Ninguno. ¡Intentalo! –

8

Podría estar equivocado (o malinterpretar su pregunta :)), pero creo que la excepción relacionada con la conexión se inicia en MySQLdb.connect(). Con MySQLdb, la excepción a catch es MySQLdb.Error. Por lo tanto, sugiero mover la configuración db dentro del bloque try y atrapar la excepción adecuada (MySQLdb.Error). Además, como se menciona @JohnMee, fetchone() devolverá None si no hay resultados, por lo que este debería funcionar:

try: 
    db = MySQLdb.connect(self.server, self.user, 
         self.passwd, self.schema) 
    cursor = db.cursor()   
    cursor.execute("SELECT VERSION()") 
    results = cursor.fetchone() 
    # Check if anything at all is returned 
    if results: 
     return True 
    else: 
     return False    
except MySQLdb.Error: 
    print "ERROR IN CONNECTION" 
return False 

Si no se preocupan por la conexión y está buscando para probar la ejecución de la consulta, Creo que se puede salir de la configuración de la conexión fuera del try pero incluyen MySQLdb.Error en su excepción, tal vez como sigue:

db = MySQLdb.connect(self.server, self.user, 
        self.passwd, self.schema) 
cursor = db.cursor() 

try: 
    cursor.execute("SELECT VERSION()") 
    results = cursor.fetchone() 
    # Check if anything at all is returned 
    if results: 
     return True 
    else: 
     return False    
except MySQLdb.Error, e: 
    print "ERROR %d IN CONNECTION: %s" % (e.args[0], e.args[1]) 
return False 

Esto al menos le daría una razón más detallada de por qué ha fallado.

Cuestiones relacionadas