Seite 1 von 1

Python Auswertung aus einer Postgresql Tabelle (nested loop??)

Verfasst: Donnerstag 6. Dezember 2018, 14:44
von yokay
Hallo liebes Forum,

Ich habe eine Postgresql Tabelle die ich in Python auswerte und via matplottlib visualisiere.
Folgende Angaben: 72 rows â 300 values wobei der erste row einen unixtimestamp enthält den ich ein leserliches Format formatiere, die restlichen Werte sind decimals mit 2 Kommastellen.

Code: Alles auswählen

cursor = conn.cursor()
cursor.execute ("Select timestamp, sensor1, sensor2, sensor3 .... sensor71 from tabelle")
werte = cursor.fetchall()
timestamp = [];
dehnung =[];
dehnungNorm[];
for row in result:
    timestamp.append(datetime.utcfromtimestamp(row[0]).strftime('%Y-%m-%d %H:%M:%S'))
    dehnung.append(float(row[1]))
    dehnungNorm.append(float(row[1]))
Nachdem ich das gemacht habe Rechne ich ein bisschen hier und da und plotte dies anschließend. Das klappt alles so wie es sein muss und ist auch richtig, allerdings nur wenn ich genau ein row timestamp und 1 row Werte habe. Also 300 x Werte und 300 y Werte.
Das funktioniert auch wenn ich den timestamp und sensor x nehme.

Zu meiner Frage:
Wie könnte ich jetzt ein loop erstellen (nested loop?) damit mein Programm alle 71 sensoren nacheinander bearbeitet? Also es soll immer den timestamp + sensor1 danach timestamp mit sensor2 ... danach timestamp mit sensor50 usw...

Lg
(und sorry falls ich es umständlich beschrieben habe)

Re: Python Auswertung aus einer Postgresql Tabelle (nested loop??)

Verfasst: Donnerstag 6. Dezember 2018, 15:43
von Sirius3
Das Tabellendesign ist schlecht. Wenn Du die Möglichkeit hast, dieses zu ändern, dann tue es, SOFORT.
Tabellenspalten sollten sein: Timestamp, sensor_nummer, wert. Timestamp sollte in der Datenbank auch von diesem Format sein und nicht eine einfache Zahl.
`;` benutzt man in Python nicht zum Abschließen von Befehlen, die gehören alle weg.
`werte` wird nicht benutzt, und `result` wird nicht definiert. Bei `dehnungNorm` ist ein Syntax-Fehler.

Re: Python Auswertung aus einer Postgresql Tabelle (nested loop??)

Verfasst: Donnerstag 6. Dezember 2018, 16:04
von yokay
Danke für deine Antwort @Sirius3,

Code: Alles auswählen

Timestamp   |Sensor1|Sensor2|....|
___________________________________________________
1535753216 |241.09  |250.37  |.....|
1535753217 |237.55  |222.33  |.....|
So sieht die Tabelle aus und ich kann es nicht ändern.

Was ich aufgezeigt habe sollte nur erklären wie ich die Daten hole und bearbeite. Wie gesagt das funktioniert alles! wenn ich Fehler beim Beispiel gemacht hab tuts mir leid.

Meine Frage war: Wie kann ich das in Python umsetzen, dass es nachdem es den timestamp und den sensor1 bearbeitet hat, weiter macht mit sensor2 etc.?
Also es nimmt: 153575321 und 241.09 danach 153575321 udn 250.37 usw.

Re: Python Auswertung aus einer Postgresql Tabelle (nested loop??)

Verfasst: Donnerstag 6. Dezember 2018, 16:10
von __deets__

Code: Alles auswählen

timestamp = row[0]
for value in row[1:]:
    ....
ist ein snippet um über die gesamten Sensorwerte zu laufen, unter Beibehaltung des timestamps.

Und wer immer für den Tabellenentwurf verantwortlich ist - das ist wirklich nicht gut so. Die Tabelle ändern zu müssen, nur weil ein neuer Sensor hinzugefügt wurde, ist ganz schlecht.

Re: Python Auswertung aus einer Postgresql Tabelle (nested loop??)

Verfasst: Freitag 7. Dezember 2018, 07:50
von yokay
danke @__deets__ werde ich gleich mal ausprobieren :)
ich mache das beste daraus :D, angenehmen freitag!

LG

Re: Python Auswertung aus einer Postgresql Tabelle (nested loop??)

Verfasst: Freitag 7. Dezember 2018, 07:57
von yokay
danke @__deets__ klappt hervorragend, genau das was ich gesucht habe !

Re: Python Auswertung aus einer Postgresql Tabelle (nested loop??)

Verfasst: Montag 10. Dezember 2018, 10:16
von yokay
Ich hab noch ne Frage zu meiner Tabelle :D
Wie kann man den Unixtimestamp in Postgresql "updaten" also dass man Beispielsweise 1535753216 schon direkt in Postgresql als human readable timestamp(%Y-%m-%d %H:%M:%S) ansehen kann? (damit man das nicht noch zusätzlich in Python umwandeln muss.

@Sirius3 und @__deets__ ihr hattet es vorher schon angemerkt :D

Re: Python Auswertung aus einer Postgresql Tabelle (nested loop??)

Verfasst: Montag 10. Dezember 2018, 11:14
von __deets__
Willst du die bestehende Tabelle veraendern?

Re: Python Auswertung aus einer Postgresql Tabelle (nested loop??)

Verfasst: Montag 10. Dezember 2018, 11:34
von yokay
Genau @__deets__ also nur die Spalte mit dem Timestamp ändern.

Re: Python Auswertung aus einer Postgresql Tabelle (nested loop??)

Verfasst: Montag 10. Dezember 2018, 11:47
von __deets__
Dann musst du dich belesen, wie man Spalten in Postgres hinzufuegt, das geht mit dem ALTER TABLE statement.

Wenn du dann eine neue Tabellenspalte hast (ts_temp) zb, dann musst du ein UPDATE machen, in dem du den neuen aus dem alten Zeitstempel berechnest. Alternativ schreibst du dir ein kleines Python-Skript, was das fuer dich tut, und updatest jede Zeile "von Hand'.

Und dann entfernst du den alten Timestamp, und benennst ts_temp so um, wie es denn am Ende wirklich heissen soll.

Re: Python Auswertung aus einer Postgresql Tabelle (nested loop??)

Verfasst: Montag 10. Dezember 2018, 12:03
von yokay
danke @__deets__ bin schon dabei :)

lg