Seite 1 von 1
Leere Rückmeldung abfangen
Verfasst: Samstag 7. März 2020, 22:54
von Duesentrieb
Hallo,
wenn ich als Ergebnis einer mySql Abfrage ein leeres Ausgabe erhalte, wie kann ich dieses dann abfangen?
Code: Alles auswählen
result = cursor.fetchall()
print (result)
if not result:
print ("Null")
else:
print ("Ausgabe")
Werden Daten zurückgeliefert sieht die Ausgabe so aus:
result: [(2020, Decimal('72082'), 3)]
Ausgabe
Ohne Daten erhalte ich:
result: [(None, None, None)]
Ausgabe
Ich stehe mal wieder auf dem Schlauch und komme nicht weiter
Re: Leere Rückmeldung abfangen
Verfasst: Samstag 7. März 2020, 23:04
von Sirius3
Das liegt an Deiner SQL-Abfrage, dass Du dreimal None bekommst, und genau das kannst Du doch auch abfragen. Da Deine Abfrage genau einen Eintrag als Ergebnis hat, solltest Du fetchone benutzen.
Zwischen print und ( gehört kein Leerzeichen.
Re: Leere Rückmeldung abfangen
Verfasst: Samstag 7. März 2020, 23:20
von __blackjack__
Wobei dreimal `None` komisch aussieht. Wir kommt das denn zustande?
Re: Leere Rückmeldung abfangen
Verfasst: Samstag 7. März 2020, 23:33
von Duesentrieb
Mit dem Weglassen des Leerzeichens entfällt die [].
Leider bleibt die Ausgabe aber weiterhin fehlerhaft.
Scheinbar ist das "None" auch ein Ergebnis:
result: (None, None, None)
Ausgabe
Gibt es noch eine Lösung?
@__blackjack__: Wenn ein Datensatz drin ist, werden drei Werte ausgegeben. Daher vermutlich die drei None
Re: Leere Rückmeldung abfangen
Verfasst: Samstag 7. März 2020, 23:46
von Sirius3
Nein, bei fetchone gibt es keine Liste mehr. Das ist ja auch der Sinn der Sache. Du hast in Deinem SQL-Ausdruck, den Du ja geheim hältst, Aggregationsfunktionen, die natürlich NULL ergeben, wenn kein Element gefunden wird. Die Lösung habe ich Dir auch schon geschrieben: Prüfe auf None.
Re: Leere Rückmeldung abfangen
Verfasst: Samstag 7. März 2020, 23:54
von Duesentrieb
na ja, so geheim ist der SQL-Ausdruck gar nicht.
Wollte nur keine überflüssigen Information beschreiben:
Code: Alles auswählen
suche_Vormonat = 'SELECT YEAR(Datum) as "Jahr_", sum(Laufzeit), Day(Datum) as "Tag" FROM `Wasserstand` WHERE Month(Datum) = ' + Vormonat + ' and YEAR(Datum) = ' + akt_Jahr
connection = mc.connect (host = "192.168.0.200", user = "root", passwd = "", db = "Steuerung")
cursor = connection.cursor()
cursor.execute(suche_Vormonat)
result = cursor.fetchone()
print("result: ",result)
if result == None:
print("Null")
else:
print("Ausgabe")
Suchen nach None, wie hier hat leider auch nichts gebracht
Re: Leere Rückmeldung abfangen
Verfasst: Sonntag 8. März 2020, 00:15
von pillmuncher
Aha. Es ist wohl wieder die passende Jahreszeit hierfür:

Re: Leere Rückmeldung abfangen
Verfasst: Sonntag 8. März 2020, 00:35
von Sirius3
Du hast ja auch ein Tuple mit DREI Werten, und nicht einmal None. SQL-Statements stückelt man nicht mit Strings und + zusammen, sondern benutzt Platzhalter.
Das Jahr_ und der Tag sind irgendwie unsinnig, ersteres, weil das ja auch reingesteckt wird, zweiteres, weil zusammen mit `sum` nur einen beliebigen Tag liefert.
Warum hat Jahr_ einen Unterstrich?
Re: Leere Rückmeldung abfangen
Verfasst: Sonntag 8. März 2020, 17:26
von Duesentrieb
ok. - Habs jetzt aber gelöst
Re: Leere Rückmeldung abfangen
Verfasst: Sonntag 8. März 2020, 17:42
von Sirius3
Da Du Deine Lösung nicht postest, mach ich das mal
Code: Alles auswählen
sql_gesamtlaufzeit = 'SELECT sum(Laufzeit) FROM `Wasserstand` WHERE Month(Datum) = %s and YEAR(Datum) = %s'
connection = mc.connect (host="192.168.0.200", user="root", passwd="", db="Steuerung")
cursor = connection.cursor()
cursor.execute(sql_gesamtlaufzeit, [vormonat, aktuelles_jahr])
gesamtlaufzeit = cursor.fetchone()[0]
print("result: ", gesamtlaufzeit)
if gesamtlaufzeit is None:
print("Null")
else:
print("Ausgabe")