Mysql
 sql >> Database >  >> RDS >> Mysql

Come verificare se esiste un record con Python MySQdb

Credo che la query "esiste" più efficiente sia semplicemente eseguire un count :

sqlq = "SELECT COUNT(1) FROM settings WHERE status = '1'"
xcnx.execute(sqlq)
if xcnx.fetchone()[0]:
    # exists

Invece di chiedere al database di eseguire qualsiasi operazione di conteggio su campi o righe, gli stai semplicemente chiedendo di restituire 1 o 0 se il risultato produce corrispondenze. Questo è molto più efficiente rispetto alla restituzione di record effettivi e al conteggio dell'importo lato client perché consente di risparmiare serializzazione e deserializzazione su entrambi i lati e il trasferimento dei dati.

In [22]: c.execute("select count(1) from settings where status = 1")
Out[22]: 1L  # rows

In [23]: c.fetchone()[0]
Out[23]: 1L  # count found a match

In [24]: c.execute("select count(1) from settings where status = 2")
Out[24]: 1L  # rows

In [25]: c.fetchone()[0]
Out[25]: 0L  # count did not find a match

count(*) sarà lo stesso di count(1) . Nel tuo caso, poiché stai creando una nuova tabella, mostrerà 1 risultato. Se hai 10.000 corrispondenze sarebbero 10.000. Ma tutto ciò che ti interessa nel tuo test è se NON è 0, quindi puoi eseguire un test di verità bool.

Aggiorna

In realtà, è ancora più veloce utilizzare solo il conteggio delle righe e non recuperare nemmeno i risultati:

In [15]: if c.execute("select (1) from settings where status = 1 limit 1"): 
            print True
True

In [16]: if c.execute("select (1) from settings where status = 10 limit 1"): 
            print True

In [17]: 

Questo è anche il modo in cui l'ORM di django esegue un queryObject.exists() .