Mysql
 sql >> Datenbank >  >> RDS >> Mysql

So überprüfen Sie, ob ein Datensatz mit Python MySQdb vorhanden ist

Ich glaube, die effizienteste "existiert es"-Abfrage besteht darin, einfach eine count durchzuführen :

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

Anstatt die Datenbank aufzufordern, Zähloperationen für Felder oder Zeilen durchzuführen, bitten Sie sie lediglich, eine 1 oder 0 zurückzugeben, wenn das Ergebnis Übereinstimmungen ergibt. Dies ist viel effizienter als das Zurückgeben tatsächlicher Datensätze und das Zählen der Menge auf der Clientseite, da es die Serialisierung und Deserialisierung auf beiden Seiten und die Datenübertragung spart.

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(*) wird dasselbe sein wie count(1) . Da Sie in Ihrem Fall eine neue Tabelle erstellen, wird 1 Ergebnis angezeigt. Wenn Sie 10.000 Übereinstimmungen haben, wären es 10.000. Aber alles, was Sie in Ihrem Test interessiert, ist, ob es NICHT 0 ist, also können Sie einen booleschen Wahrheitstest durchführen.

Aktualisieren

Tatsächlich ist es sogar noch schneller, nur die Zeilenanzahl zu verwenden und nicht einmal Ergebnisse abzurufen:

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

Auf diese Weise führt das ORM von Django auch ein queryObject.exists() aus .