Und in dem Code, den Du zeigst, ist auch kein Fehler, weil das wichtige davon fehlt.
Wenn Du also WIRKLICHE Hilfe willst, ...
Mysql sich ändernde Daten auslesen
-
- User
- Beiträge: 19
- Registriert: Dienstag 31. Januar 2017, 21:33
1 ist genauso True wie True und wie viele Leerzeichen ist doch wurscht, Hauptsache sie sind gleich eingerückt... Das tut der Funktion des Codes doch keine Abbruch.
Ok, mag sein, aber auch das führt nicht zu diesem "Fehler"..
Ich hole die SMS und schreibe sie zur weiteren Verwendung in die MySQL Datenbank. Das macht die Funktion SMS_holen() Das funktioniert fehlerfrei. Die 1 ist ein Parameter, der ist historisch und eigentlich nicht mehr nötig.
Ich habe an anderer Stelle auch Cursor und die hießen immer dbcursor. Für Testzwecke habe ich den dann einfach mal db1cursor genannt, nur damit er einen eigenen Namen hat.Sirius3 hat geschrieben: ↑Samstag 17. April 2021, 17:50 Was soll die 1 bei db1cursor und warum holst Du Dir den Cursor von einer con(sole)?
Der Code dafür ist:Code: Alles auswählen
con = mysql.connector.connect(host = "192.168.0.1"... usw..
Ja, stimmt, das war historisch und ich hatte es noch nicht entfernt.
Ok
Ich hatte die Informationen während des Testens da mal rein geschrieben, um zu schauen, wo, was ankommt. Aber eigentlich gebe ich an die Funktion nur die id weiter, über die die Funktion sich selbst alle Daten aus der SQL Tabelle holt. Ich könnte die natürlich auch als globale Variablem weitergeben, zumal es ja einfach nur Nummer und Text ist.
Ich habe versucht auf die Schnelle mal auf Python 3 umzustellen, aber das geht nicht. Ich verwende Gammu und da ist die Python 3 Bibliothek nicht kompatibel. Deswegen funktioniert dein Code auch nicht, denn in Python 2 gibt es kein contextlib und Gammu funktioniert, zumindest nicht spontan auf Python 3.
Da da aber eine komplette Haussteuerung läuft, will ich da jetzt nix spontan uminstallieren und dann die nächsten Tage damit verbringen, alles wieder ans Laufen zu bringen.
Ich setze jetzt erst mal einen weiteren Rechner auf und werde das dann mal mit deinem Code und Python 3 versuchen. Vielleicht komme ich dann weiter..
Vielen Dank erstmal bis hierhin..
Ich melde mich die Tage, wenn ich soweit bin oder ich es ans Laufen bekommen habe wieder.
Bis dahin an alle liebe Grüße und bleibt gesund.
Ralf
-
- User
- Beiträge: 19
- Registriert: Dienstag 31. Januar 2017, 21:33
So, nachdem mich das nicht los gelassen hat, hier die Lösung:
Der Aufruf der Datenbank selbst muss in der Schleife stehen, dann geht es...
Trotzdem danke an alle...
Der Aufruf der Datenbank selbst muss in der Schleife stehen, dann geht es...
Trotzdem danke an alle...
Code: Alles auswählen
# -*- coding: utf8' -*-
import time
import mysql.connector
Startzeit = time.strftime("%d.%m.%Y %H:%M:%S")
print ("Start des SMS Tools am :" + time.strftime("%d.%m.%Y %H:%M:%S"))
#Loop
while True:
#SMS senden
con = mysql.connector.connect(host = "192.168.0.1",
user = "user",
passwd = "irgendeinpasswort",
db = "meine Datenbank")
dbcursor = con.cursor()
dbcursor.execute("select id, status, nummer, text, datum from sms_send order by id asc limit 1")
try:
sms_id, status, nummer, text, datum =dbcursor.fetchone()
print (sms_id)
print (nummer)
print (text)
except:
print ("kein Datensatz")
time.sleep(2)
Seufz. Oder ein commit. Wie ich ja gezeigt habe. Denn die Transaktion isoliert dich von Änderungen. Siehe https://dev.mysql.com/doc/refman/8.0/en ... evels.html
Alternativ das isolation level ändern.
Alternativ das isolation level ändern.
-
- User
- Beiträge: 19
- Registriert: Dienstag 31. Januar 2017, 21:33
Ich verstehe nicht, was du mir sagen willst. Ein Commit beschränkt sich doch auf das Schreiben in einer Datenbank, nicht aber auf das Lesen. Außerdem habe ich weiter oben doch beschrieben, dass ich das dennoch versucht habe. Ohne Erfolg..__deets__ hat geschrieben: ↑Samstag 17. April 2021, 22:48 Seufz. Oder ein commit. Wie ich ja gezeigt habe. Denn die Transaktion isoliert dich von Änderungen. Siehe https://dev.mysql.com/doc/refman/8.0/en ... evels.html
Alternativ das isolation level ändern.
Und was mir ein "isolation level" bringen soll, erschließt sich mir nicht. Ich habe keine Massendaten und verschiedenste Clients, die auf die gleichen Daten schreibend zugreifen und ich muss nicht für Daten Konsistenz sorgen..
Ich wollt einfach nur einen neu dazu gekommen Datensatz sehn..
Hast du den Link mal durchgelesen? Da steht die Antwort auf deine Fragen: die Datenbank legt einen Snapshot an, durch den du die Aenderung der Daten erst dann zu sehen bekommst, wenn du die Transaktion explizit abschliesst. Mit Commit oder Rollback. Das ist so gewollt.
Man kann es natuerlich auch erreichen, indem man immer wieder die Verbindung abreisst, und neu aufbaut, was auch eine neue Transaktion erzeugt. So hast du das "geloest".
Und "beschrieben" hast du irgendwas irgendwie mit commit. Mein Code belegt, das es geht. Irgendwer hat also irgendwo einen Fehler gemacht, in Code, den er nicht gezeigt hat. Aber das ist natuerlich alles irrelevant
Im uebrigen zwingt dich niemand, eine Technologie einzusetzen, die Millionen Datensaetze und hunderte konkurrierende Zugriffe zeitgleich abarbeiten kann. Aber wenn du es tust, dann wirst du dich wohl oder uebel damit auseinander setzen muessen, wie diese Technologie tickt. Wer statt einem Spaten einen Bagger bemueht, wird auch was ueber Kettenschmiermittel lernen muessen.
Wesentlich besser waere natuerlich eine Technologie, die speziell fuer das hier beschriebene Szenario gemacht ist, zu nutzen. Also zB eine persistente Queue. Aber das ist natuerlich wieder so ein Fall von "sollte man machen", auf den du ja eher allergisch reagierst.
Man kann es natuerlich auch erreichen, indem man immer wieder die Verbindung abreisst, und neu aufbaut, was auch eine neue Transaktion erzeugt. So hast du das "geloest".
Und "beschrieben" hast du irgendwas irgendwie mit commit. Mein Code belegt, das es geht. Irgendwer hat also irgendwo einen Fehler gemacht, in Code, den er nicht gezeigt hat. Aber das ist natuerlich alles irrelevant
Im uebrigen zwingt dich niemand, eine Technologie einzusetzen, die Millionen Datensaetze und hunderte konkurrierende Zugriffe zeitgleich abarbeiten kann. Aber wenn du es tust, dann wirst du dich wohl oder uebel damit auseinander setzen muessen, wie diese Technologie tickt. Wer statt einem Spaten einen Bagger bemueht, wird auch was ueber Kettenschmiermittel lernen muessen.
Wesentlich besser waere natuerlich eine Technologie, die speziell fuer das hier beschriebene Szenario gemacht ist, zu nutzen. Also zB eine persistente Queue. Aber das ist natuerlich wieder so ein Fall von "sollte man machen", auf den du ja eher allergisch reagierst.
@Nonickatall: Und das Problem mit dem "mein Code ist irgendwie so, aber zeigen will ich ihn nicht" ist, als würdest du mit einem fremden Kind zum Arzt gehen, weil dein Sohn Kopfschmerzen hat. Ist auch ein Kind. Hat auch einen Kopf. Also warum kann der Arzt an dem nicht deinen Sohn diagnostizieren?