Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como verificar se o registro existe com Python MySQdb


Acredito que a consulta "existe" mais eficiente é apenas fazer um count :
sqlq = "SELECT COUNT(1) FROM settings WHERE status = '1'"
xcnx.execute(sqlq)
if xcnx.fetchone()[0]:
    # exists

Em vez de pedir ao banco de dados para executar qualquer operação de contagem em campos ou linhas, você está apenas solicitando que ele retorne 1 ou 0 se o resultado produzir alguma correspondência. Isso é muito mais eficiente do que retornar registros reais e contar a quantidade do lado do cliente, pois economiza serialização e desserialização em ambos os lados, além da transferência de dados.
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(*) será igual a count(1) . No seu caso, porque você está criando uma nova tabela, ela mostrará 1 resultado. Se você tiver 10.000 correspondências, seriam 10.000. Mas tudo o que importa em seu teste é se NÃO é 0, então você pode realizar um teste de verdade bool.

Atualizar

Na verdade, é ainda mais rápido usar apenas o número de linhas e nem mesmo buscar 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]: 

É também assim que o ORM do django faz um queryObject.exists() .