2012-07-31 7 views
6

Sto accedendo a un database MySQL da Python tramite la libreria MySQLdb. Sto tentando di testare la connessione al database come mostrato di seguito.Come testare la connettività del database in 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 

È questo il modo giusto per testare la connettività durante la scrittura di unità di test? Se c'è un modo migliore, per favore chiariscilo!

+0

corretto l'errore nel codice. Hai bisogno di sapere se questo è un modo giusto per testare? – Nemo

+0

* Perché * vuoi * testare * la connettività? Cosa fai se il test fallisce? –

+0

Sto scrivendo test di unità per i metodi di accesso db. Quindi, vogliamo estirpare il caso quando l'accesso al database fallisce. – Nemo

risposta

1

Sì. Mi sembra buono.

mie preferenze personali:

  • in realtà un'eccezione se nessun collegamento
  • avete solo bisogno di fetchOne, il test per None è superfluo (a meno che non siete interessati a far rispettare una versione minima del database
+0

Non ho capito perché è superfluo. Potresti per favore elaborare o indicare come avresti codificato questo? – Nemo

+0

"risultati" sarà nessuno quando non vi è alcuna connessione. Probabilmente otterrai qualche altra eccezione cercando di fare "risultati [0]" quando è None. Provalo! –

8

Potrei sbagliare (o interpretare erroneamente la tua domanda :)), ma credo che un'eccezione relativa alla connessione venga lanciata su MySQLdb.connect(). Con MySQLdb, l'eccezione da catturare è MySQLdb.Error. Pertanto, suggerirei di spostare l'installazione db all'interno del blocco try e di rilevare l'eccezione appropriata (MySQLdb.Error). Inoltre, come cita @JohnMee, fetchone() si restituiscono None se non ci sono risultati, quindi questo dovrebbe funzionare:

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 

Se non vi interessa circa il collegamento e sta solo cercando di verificare l'esecuzione della query, Credo che si potrebbe lasciare la configurazione della connessione al di fuori del try ma includono MySQLdb.Error nella vostra eccezione, forse, come segue:

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 

Questo sarebbe almeno dare una ragione più dettagliata del perché non è riuscito.

Problemi correlati