Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment vérifier si l'enregistrement existe avec Python MySQdb

Je pense que la requête "existe-t-elle" la plus efficace est-elle simplement de faire un count :

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

Au lieu de demander à la base de données d'effectuer des opérations de comptage sur des champs ou des lignes, vous lui demandez simplement de renvoyer un 1 ou un 0 si le résultat produit des correspondances. C'est beaucoup plus efficace que de renvoyer les enregistrements réels et de compter le montant côté client, car cela permet d'économiser la sérialisation et la désérialisation des deux côtés, ainsi que le transfert de données.

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 être le même que count(1) . Dans votre cas, parce que vous créez une nouvelle table, elle affichera 1 résultat. Si vous avez 10 000 correspondances, ce serait 10 000. Mais tout ce qui vous intéresse dans votre test est de savoir si ce n'est PAS 0, vous pouvez donc effectuer un test de vérité booléen.

Mettre à jour

En fait, il est encore plus rapide d'utiliser simplement le nombre de lignes et de ne même pas récupérer les résultats :

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

C'est aussi ainsi que l'ORM de django fait un queryObject.exists() .