Hallo,
ich möchte gerne eine Datenbank mittels Python 2.7 überprüfen ob ein Eintrag mit einer spezifischen ID schon existiert.
Der MySQL Query sollte ja lauten:
SELECT * FROM testdb WHERE ID = 0815
cursor = connection.cursor()
cursor.execute("SELECT * FROM testdb WHERE ID = 0815")
Wenn dieser Query keine Ergebnisse zurück liefert, existiert kein Eintrag mit der ID = 0815 in der Datenbank.
Wie setze ich das in Python um?
Kann mir jemand eine Tipp geben?
MFG
MySQL - Prüfung ob Eintrag vorhanden
@magkro: Na im Grunde hast Du es doch schon fast. Du musst jetzt nur noch mindestens einen Datensatz vom `cursor` abfragen und Dir das Ergebnis davon anschauen.
Als Abfrage würde ich übrigens nicht ``SELECT * FROM …`` verwenden sondern ``SELECT 1 FROM …`` oder irgend einen anderen Wert. Zumindest wenn Du gar nicht an dem Datensatz interessiert bist, sondern nur wissen willst ob er existiert oder nicht.
Selbst wenn man am Datensatz interessiert ist würde man eher die Spaltennamen explizit aufführen statt dem * denn dann ist der Code robust gegen neu hinzugefügte Spalten oder die Änderung der Spaltenreihenfolge.
Als Abfrage würde ich übrigens nicht ``SELECT * FROM …`` verwenden sondern ``SELECT 1 FROM …`` oder irgend einen anderen Wert. Zumindest wenn Du gar nicht an dem Datensatz interessiert bist, sondern nur wissen willst ob er existiert oder nicht.
Selbst wenn man am Datensatz interessiert ist würde man eher die Spaltennamen explizit aufführen statt dem * denn dann ist der Code robust gegen neu hinzugefügte Spalten oder die Änderung der Spaltenreihenfolge.
Wenn es schon ums Zählen geht würde ich auch explizit SELECT COUNT(*) FROM ... verwenden.BlackJack hat geschrieben:Als Abfrage würde ich übrigens nicht ``SELECT * FROM …`` verwenden sondern ``SELECT 1 FROM …`` oder irgend einen anderen Wert.
Hallo,
Danke für die Antworten und Tipps.
Doch leider hab ich keine Ahnung wie ich den Tipp umsetzen soll.
Du musst jetzt nur noch mindestens einen Datensatz vom `cursor` abfragen und Dir das Ergebnis davon anschauen.
Muss ich zur Umsetzung cursor.fetchall() verwenden oder gibt es einen einfacheren Weg?
Gruß
Danke für die Antworten und Tipps.
Doch leider hab ich keine Ahnung wie ich den Tipp umsetzen soll.
Du musst jetzt nur noch mindestens einen Datensatz vom `cursor` abfragen und Dir das Ergebnis davon anschauen.
Muss ich zur Umsetzung cursor.fetchall() verwenden oder gibt es einen einfacheren Weg?
Gruß
- noisefloor
- User
- Beiträge: 3882
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
Von daher ist es auch egal, ob du `fetchall()`oder `fetchone()` nutzt. Der "Aufwand" und das Vorgehen ist identisch.
Gruß, noisefloor
Heißt konkret: du musst schon _ob_ es ein konkretes Ergebnis gibt oder ob die Abfrage `None` zurück liefert. Bei letzterem existiert der Datensatz nicht.Du musst jetzt nur noch mindestens einen Datensatz vom `cursor` abfragen und Dir das Ergebnis davon anschauen.
Von daher ist es auch egal, ob du `fetchall()`oder `fetchone()` nutzt. Der "Aufwand" und das Vorgehen ist identisch.
Gruß, noisefloor
Ich glaube genau das war die Frage - ob '.fetch*()' da die korrekte Funktion für ist.
Ich, selbst Python und DB-N00b, hab mich das auch schon zur Python DB API gefragt. Gerade diese 'gab es ein Ergebnis?' Nummer ; kann ja genauso gut sein, das da ein bool oder so irgendwo auf false gesetzt wird, so das man sich das konkrete Ergebnis nicht mehr anschauen muss.
Ich, selbst Python und DB-N00b, hab mich das auch schon zur Python DB API gefragt. Gerade diese 'gab es ein Ergebnis?' Nummer ; kann ja genauso gut sein, das da ein bool oder so irgendwo auf false gesetzt wird, so das man sich das konkrete Ergebnis nicht mehr anschauen muss.
Aber bei nur "existiert - ja/nein?" ist 1 doch aus Sicht der Last auf der DB besser, da die RDMS die ich kenne bei '1' alle nach dem ersten Fund aufhören zu suchen und keine weitere Last erzeugen, oder irre ich mich?/me hat geschrieben:Wenn es schon ums Zählen geht würde ich auch explizit SELECT COUNT(*) FROM ... verwenden.BlackJack hat geschrieben:Als Abfrage würde ich übrigens nicht ``SELECT * FROM …`` verwenden sondern ``SELECT 1 FROM …`` oder irgend einen anderen Wert.
@Judge: In diesem Fall kann es nur 1 oder 0 sein, denn pro RFID wird da ja wohl nur ein Datensatz existieren und damit auch ein UNIQUE-Constraint auf der Spalte liegen, was in der Regel einen Index impliziert in dem schnell nachgeschaut werden kann ob es denn nun 1 oder 0 ist. Ich denke nicht, dass es dort wirklich grosse Laufzeitunterschiede gibt.