Seite 1 von 1

Anzahl der Ergebnisse

Verfasst: Dienstag 19. Januar 2010, 23:04
von jovica.aleksic
Hallo!
Eine Einsteigerfrage:
Wie bekomme ich auf einfachste Weise die Anzahl der Ergebnisse bei einem Aufruf wie

Code: Alles auswählen

cursor.execute('select * from Users where email=?', (mail_addr,))
Ich möchte im Grunde überprüfen, ob ein Eintrag mit gegebener Emailadresse existiert oder nicht, folglich ob ich gar kein Ergebnis oder eben eines (oder gar mehrere) bekomme.
Ich verstehe dass man den cursor zum Durchiterieren nutzen kann, und ich könnte folglich eine Variable auf 0 setzen, dann durch alle Ergebnisse iterieren und die Variable hochzählen lassen, hinterher wüsste ich die Anzahl der Ergebnisse. Aber das muss ja sicherlich auch einfacher gehen?

Verfasst: Dienstag 19. Januar 2010, 23:10
von EyDu
Hallo!

Da solltest du wohl noch einmal das Tutorial lesen.

Code: Alles auswählen

results = cursor.fetchall()
print len(results)

Verfasst: Dienstag 19. Januar 2010, 23:30
von Hyperion
Ich würd auch nen count(spalte) nehmen, anstatt ein select * ;-) Wozu die 100000 Emails-Adressen plus andere Attribute zurückliefern lassen, die man nicht braucht?

Verfasst: Dienstag 19. Januar 2010, 23:32
von jovica.aleksic
Danke!
Tutorial........schaue ich mir ständig an, hier und dort, aber ich bin nicht jemand der sowas von A bis Z lesen kann, persönliches Manko. Jeder lernt anders, und ich könnte zB statt SVN zu nutzen immernoch das Tutorial lesen :D Oder eben PHP, ActionScript etc..
Bitte nicht böse sein bei dummen Fragen, man kann ja zB auch eine Antwort verweigern wenn einem die Frage nicht einer fairen Antwort würdig erscheint.

Btw, war über

Code: Alles auswählen

cursor.rowcount
gestolpert - sollte das auch das gewünschte Ergebnis liefern? ...Ach naja, teste ich sobald ein paar Daten in der DB stecken.

Verfasst: Dienstag 19. Januar 2010, 23:59
von Hyperion
Wieso nicht ein einfaches?

Code: Alles auswählen

select count(email)
from tabelle
where email='irgend eine mail adresse';
Worin siehst Du den "Vorteil" von "select *" und dem Abfragen der Ergebnis-Länge?

Verfasst: Mittwoch 20. Januar 2010, 00:29
von jovica.aleksic
Ich sehe gar keinen Vorteil, sondern bin einfach komplett ahnungslos :)
Ich bin an sich Frontend-Entwickler, und immer gab es einen PHP/SQL Experten an meiner Seite.
Hatte das in deiner ersten Antwort nicht ganz verstanden... Werde das Ganze morgen testen, jetzt ist erstmal bettzeit angesagt :) Aber danke für das wiederholte Nachhaken, weiß das zu schätzen!

Verfasst: Mittwoch 20. Januar 2010, 12:43
von noisefloor
Hallo,

es gibt halt zwei Möglichkeiten:

Wenn man es wie du macht ('SELECT * ...'), dann musst du auf Vorhandensein eines Ergebnisses prüfen. Weil wenn keine Mail-Adresse existiert, dann liefert SQL NULL zurück, was AFAIK die DBAPI in Python's None umwandelt.

Also:

Code: Alles auswählen

cursor.execute("SELECT * FROM tabelle WHERE email LIKE 'foorbar'")
ergebnis = cursor.fetchall()

if not ergebnis:
    print 'Keine E-Mail'
Wenn du count nimmt, dann kommt als Ergebnis nie NULL zurück, sondern immer eine Zahl, ggf. 0.

Code: Alles auswählen

cursor.execute("SELECT count(irgendwas) FROM tabelle WHERE email LIKE 'foorbar'")
ergebnis = cursor.fetchall()

if ergebnis == 0:
    print 'Keine E-Mail'
Gruß, noisefloor

Verfasst: Mittwoch 20. Januar 2010, 12:58
von BlackJack
@noisefloor: Ohne jetzt nachgeschaut zu haben dürfte `fetchall()` eine leere Liste liefern, wenn keine Datensätze da sind. `None` wäre eine ziemlich blöde Idee.

Verfasst: Mittwoch 20. Januar 2010, 16:06
von noisefloor
Hallo,

BlackJack hat geschrieben:@noisefloor: Ohne jetzt nachgeschaut zu haben dürfte `fetchall()` eine leere Liste liefern, wenn keine Datensätze da sind. `None` wäre eine ziemlich blöde Idee.
Es wird in der Tat eine leere Liste geliefert. Aber: es funktioniert. Gerade ausprobiert. :-)

Gruß, noisefloor