Seite 1 von 1

DB-Abfrage in Schleife gibt immer gleiche Ergebnisse zurück

Verfasst: Mittwoch 5. November 2008, 17:55
von gauron
heyho (mein erster Post)

Ich versuche mich grade an einem kleinen Pythonscript, das alle paar Sec eine MySQL Abfrage machen soll und bei Veränderung zur vorherigen Abfrage eine Ausgabe erzeugt :

Code: Alles auswählen

#!/usr/bin/python

# Dieses Script soll auf neue Eintraege in vm_msgs achten 

import MySQLdb 
import time


oldmsg = []
    
con = MySQLdb.connect("localhost", "asterisk" , "helpme", "asterisk")    
sql = 'SELECT MAX(vm_msgs.id), user_id, email FROM vm_msgs, users WHERE users.id = vm_msgs.user_id AND users.email > \'\' GROUP BY users.id'
msg = con.cursor()


while 1:
    
    msg.execute(sql)
    
    for alt in oldmsg:    
	  for neu in msg:
	      if neu[1] == alt[1] and neu[0] == alt[0]:
		    print "Keine Aenderung ..."
	      if neu[1] == alt[1] and neu[0] > alt[0]:
	           print "Eine neue Nachricht !!"
    oldmsg = []
    for neu in msg:
	oldmsg.append(neu)
    msg = []
    time.sleep(2)
Leider ist bei jedem Durchlauf das selbe Ergebniss in 'msg' obwohl sich der Eintrag hätte ändern sollen.
Was ist mein Fehler ????

thx gauron

Verfasst: Mittwoch 5. November 2008, 18:01
von querdenker
Schau dir nochmal deinen Code an. Die Einrückungen sind auf jeden fall hier defekt.

Verfasst: Mittwoch 5. November 2008, 18:04
von gauron
oki danke, war aber n fehler beim übertragen ;) im orginal was i.O.

Verfasst: Mittwoch 5. November 2008, 18:15
von BlackJack
Wenn MySQL hier eine Datenbank verwendet, die Transaktionen unterstützt siehst Du deswegen vielleicht keine Änderungen.

Oder es passieren tatsächlich keine Änderungen.

Oder Du zeigt uns vielleicht mal *echten* Quelltext wo das Problem auftritt und keinen der beim zweiten Durchlauf meckert, dass Listen keine `execute()`-Methode kennen.

Der Code ist übrigens ein wenig zu kompliziert. Du steckst da mittels einer Schleife *ein einzelnes* Tupel in eine Liste. Eine völlig unnötige Verschachtelung. Gleiches gilt für die verschachtelten ``for``-Schleifen zum Testen. Über eine Liste die grundsätzlich nur ein Element enthalten kann mit einer Schleife zu gehen ist schon unsinnig, dass zu verschachteln ist unsinnig hoch zwei.

Zur Einrückung: Verwende keine Tabs, dann passiert so etwas auch nicht.

Verfasst: Donnerstag 6. November 2008, 08:28
von gauron
ähm das ist eigentlich der echte quelltext , nur grad wirklich nicht funktionsfähig ... war noch ne zwischenversion vom basteln ... das "msg = con.cursor" sollte eigentlich am Anfang der schleife stehen ;)

Das mit den Scheifen muss ich mir echt noch überlegen ... aber bin halt erst Python-Anfänger ;)