Letzten Eintrag aus mariadb - Tabelle auslesen

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
klabue
User
Beiträge: 11
Registriert: Freitag 15. April 2022, 18:22

Hallo
Ich habe folgendes Problem:

Mit der Anweisung

statement = "Select Zeitstempel, T_VL_SM, T_RL_SM from Solar order by Zeitstempel desc limit 1"
cursor.execute(statement)
for (Zeitstempel, T_VL_SM, T_RL_SM) in cursor:
print(Zeitstempel, T_VL_SM, T_RL_SM)

möchte ich alle 20 Sekunden den letzten Eintrag aus der Tabelle "Solar" auslesen. Diese Tabelle wird, von anderer Stelle aus, alle 20 Sekunden neu beschrieben und ich möchte halt immer den letzten Wert auslesen

Beim Starten des Programms bekomme ich dann auch den letzten Eintrag angezeigt.
Wenn aber 20 (40...) Sekunden später wieder die SELECT - Anweisung ausgeführt wird, bekomme ich immer wieder den gleichen Eintrag wie beim ersten mal ausgegeben.
Das Ganze funktioniert nur, wenn vor der SELECT - Anweisung die Verbindung zur Datenbank neu aufgebaut wird, und nach der Ausgabe der Daten diese wieder geschlossen wird ...connection.close().
Ich will aber nicht ständig die Verbindung auf- und abbauen, sondern die Verbindung immer offen lassen.

Welche Möglichkeiten gibt es?
Benutzeravatar
sparrow
User
Beiträge: 4187
Registriert: Freitag 17. April 2009, 10:28

Das Problem hatten wir letztens schone einmal, wenn ich mich nicht täusche.
Ich würde erst einmal versuchen die Transaktion zurückzusetzen. Wenn die alte Transaktion aktivi ist, sieht man darin natürlich keine neuen Daten.
klabue
User
Beiträge: 11
Registriert: Freitag 15. April 2022, 18:22

Wie geht das?
bfm
User
Beiträge: 88
Registriert: Donnerstag 14. März 2013, 09:42

Ohne den genauen Programmcode kann man hier schlecht was sagen, warum der Cursor nicht aktualisiert wird.

In SQL gibt es auch die Funktionen MAX() und MIN(). Wie sich vermuten lässt, ist das Ergebnis dann der Datensatz mit dem höchsten bzw. niedrigsten Wert der angegebenen Spalte.
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

klabue hat geschrieben: Samstag 16. April 2022, 06:38Wie geht das?
Mit commit oder rollback Methode der Verbindung. https://peps.python.org/pep-0249/#connection-methods

Alternativ kann man ggf das transaction Isolation Level so anpassen, dass man die neuen Daten immer sieht.

Und zu guter letzt klingt da so, als ob du eine Datenbank als Messaging-Bus benutzt. Dafür ist die nicht gedacht. Sowas wie MQTT würde diese Daten direkt verteilen, ohne solche Krücken.
Antworten