Seite 1 von 1

"Event" in SQL

Verfasst: Samstag 21. Februar 2015, 15:13
von audacity363
Guten Tag zusammen,
ich versuche gerade einen "Event Listener" zu schreiben, der auf einen Wert in einer SQL Tabelle wartet.
Im Grunde ist die Logik sehr einfach dafür:
- Jede Sekunde wird mit einem einfachen "select" nach einem angegebenen Wert gesucht
- Nach 10 Sekunden gibt es einen Timeout.

Das war es schon. Mein Code bis jetzt:

Code: Alles auswählen

def aufAntwortwarten(auftrag_id):
    gefunden = False
    for	i in range(0, 10):
     	print "Versuch %d  von 10" % i + 1
     	suche = connection.execute(telestack.select().where(telestack.c.auftrag_id==auftrag_id)).fetchone()
     	if suche:
            gefunden = True
            break
     	time.sleep(1)
    if gefunden:
     	return suche
    else:
     	return False
Allerdings bekomme ich nichts vom select zurück wenn innerhalb des Loops in die Tabelle geschrieben wurde.
Wieso ist dies so und wie kann man dies lösen?

Re: "Event" in SQL

Verfasst: Samstag 21. Februar 2015, 15:57
von Sirius3
@audacity363: welche Datenbank und welche Anbindung benutzt Du denn? Commitest Du auch das, was Du in die Datenbank schreibst?
Statt False ist es üblich bei keiner Antwort None zurückzuliefern oder gleich eine Exception zu werfen. Dein Code ist fehlerhaft: Strings und Zahlen kann man nicht addieren. Woher kommt connection? Klassen sollten mit einem Großbuchstaben Anfangen.

Code: Alles auswählen

def aufAntwortwarten(connection, auftrag_id):
    for i in range(1, 11):
        print "Versuch %d  von 10" % i
        suche = connection.execute(Telestack.select().where(Telestack.c.auftrag_id==auftrag_id)).fetchone()
        if suche:
            return suche
        time.sleep(1)
    return None

Re: "Event" in SQL

Verfasst: Samstag 21. Februar 2015, 17:36
von audacity363
Sirius3 hat geschrieben:@audacity363: welche Datenbank und welche Anbindung benutzt Du denn? Commitest Du auch das, was Du in die Datenbank schreibst?
Statt False ist es üblich bei keiner Antwort None zurückzuliefern oder gleich eine Exception zu werfen. Dein Code ist fehlerhaft: Strings und Zahlen kann man nicht addieren. Woher kommt connection? Klassen sollten mit einem Großbuchstaben Anfangen.
Ich benutze MySql mit SqlAlchemy als Python Schnittstelle. Ja ich commite es. Es steht ja in der Tabelle drinnen. Wenn ich das ganze noch einmal laufen lasse findet er den Eintrag sofort.
Warum ist der Code fehlerhaft? "i" ist doch ein Integer den ich mit "%d" in den String einbinde.
"connection" ist eine globale Variable in diesen Programm.
Das ganze ist ein kleiner Ausschnitt aus einem Programm, welches als Datenbank Schnittelle fungiert.

Re: "Event" in SQL

Verfasst: Samstag 21. Februar 2015, 18:18
von Sirius3
@audacity363: ob das Programm mit einem Fehler abbricht oder nicht, läßt sich einfach dadurch zeigen, indem man es startet. Ob etwas in einer Tabelle zu einem bestimmten Zeitpunkt drinnen steht, kannst Du nicht dadurch zeigen, dass es irgendwann später drinsteht.
Dass connection global ist, ist mir schon klar, das ist aber schlecht.

Re: "Event" in SQL

Verfasst: Samstag 21. Februar 2015, 18:41
von audacity363
Sirius3 hat geschrieben:@audacity363: ob das Programm mit einem Fehler abbricht oder nicht, läßt sich einfach dadurch zeigen, indem man es startet. Ob etwas in einer Tabelle zu einem bestimmten Zeitpunkt drinnen steht, kannst Du nicht dadurch zeigen, dass es irgendwann später drinsteht.
Das Programm läuft ja, sonst würde ich dies ja auch erwähnen bzw. gar nicht hier posten.
In den 10 Sekunden kann man sich aber per SQL Konsole die Tabelle ausgeben lassen und sehen, dass der Eintrag, der eigentlich von dem Python Programm gefunden werden sollte, in der Tabelle steht. Damit sehe ich das er nicht richtig die Query absetzt bzw. aus irgendeinem Grund keine Ergebnisse zurück gibt.