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()
.