sql >> Base de Datos >  >> RDS >> Mysql

Cómo verificar si existe un registro con Python MySQdb

Creo que la consulta "existe" más eficiente es simplemente hacer un count :

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

En lugar de pedirle a la base de datos que realice operaciones de conteo en campos o filas, solo le pide que devuelva un 1 o un 0 si el resultado produce coincidencias. Esto es mucho más eficiente que devolver registros reales y contar la cantidad del lado del cliente porque ahorra serialización y deserialización en ambos lados, y la transferencia de datos.

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(*) va a ser lo mismo que count(1) . En su caso, debido a que está creando una nueva tabla, mostrará 1 resultado. Si tiene 10 000 coincidencias, sería 10 000. Pero lo único que le importa en su prueba es si NO es 0, por lo que puede realizar una prueba de verdad bool.

Actualizar

En realidad, es aún más rápido usar solo el conteo de filas y ni siquiera obtener resultados:

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]: 

Así es también como el ORM de django hace un queryObject.exists() .