Seite 1 von 1

Export - Berechnung - Import von SQL-Daten

Verfasst: Freitag 22. Dezember 2017, 23:01
von Algha
Hallo zusammen,

ich bräuchte mal wieder Eure Hilfe :) Mit dem Import von CSV Dateien in eine SQL Datenbank hatte ja letztens schon perfekt geklappt. Nun steh ich aber vor der nächsten Aufgabe und weiß nicht so recht wie ich das ganze angehen soll.

In eine Datenbank werden regelmäßig Daten kopiert. Mit diesen Daten sollen verschiedene weitere berechnet werden. Da zum Teil auch mit Fallunterscheidung berechnet wird bin ich mir nicht so sicher ob man das die Datenbank selbst berechnen lassen sollte. Auch weiß ich nicht ob ich der Datenbank beibringen kann das diese Berechnung nachts durchgeführt werden soll.

So nun zu den Daten. Beispielsweise gibt es aller einer Minute die Daten A und B und C soll berechnet werden (der Import erfolgt zum Beispiel stündlich und mehrere verschiedene C's sollen berechnet werden. Meine Überlegung war nun die Daten A und B mir von der DB zu holen, zu berechnen und C in die DB zu schreiben (sollte ja über Arrays lösbar sein, Sinnvoll?). Da es immer wieder neue Daten gibt (über Jahre) muss die Berechnung zum Beispiel täglch durchgeführt werden. Wie könnte ich es nun lösen das nicht immer alles neu berechnet wird?

Hoffe man kann mich so halbwegs verstehen :)

Danke schon und schöne Feiertage euch allen

Re: Export - Berechnung - Import von SQL-Daten

Verfasst: Sonntag 31. Dezember 2017, 09:53
von Sirius3
@Algha: man fragt die Datenbank nach allen A und B für die es kein C gibt. Wie das konkret geht, hängt halt davon ab, wie Dein Datenbankdesign aussieht. Auch kann ich mir kaum vorstellen, dass das Berechnen von C so aufwändig ist, dass man das nicht auch sofort machen kann, bei 60 Werten.

Re: Export - Berechnung - Import von SQL-Daten

Verfasst: Freitag 12. Januar 2018, 15:43
von Algha
Hallo Sirius,

da die Werte kontinuierlich auflaufen (also zum Beispiel aller einer Minute) könnte ich doch sicher auch abfragen in SQL wann der letzte Wert von C vorhanden ist und der letzte von A & B. Für diesen Zeitraum müsste dann berechnet werden.

Der Aufbau in der DB sieht grob so aus (einige Attribute fehlen)

Kanal --- Datum --- Value von Kanal
A --- 2017.12.12 23:23 --- Value von A für Berechnung
B --- 2017.12.12 23:23 --- Value von B für Berechnung
A --- 2017.12.12 23:24 --- Value von A für Berechnung
B --- 2017.12.12 23:24 --- Value von B für Berechnung



Mit Berechnungen in einer Datenbank kenne ich mich leider nicht aus. Die Formel an sich ist nicht schwer, aber halt mit ln, exp usw. Hier mal Beispielhaft auf die schnelle aus Excel kopiert:

=WENN(A11>0;(234,175*LN(610,78*EXP((17,08085*A11)/(234,175+A11))*B11/100/610,78)/(17,08085-LN(610,78*EXP((17,08085*A11)/(234,175+A11))*B11/100/610,78)));(272,44*LN(610,714*EXP((22,44294*A11)/(272,44+A11))*B11/100/610,714)/(22,44294-LN(610,714*EXP((22,44294*A11)/(272,44+A11))*B11/100/610,714))))


Mit welchem Modul arbeitet man am besten für die Speicherung der Daten aus der Datenbank, der Berechnung und anschließenden Import? Geht es da in die Richtung wie bei dem csv Modul?

Danke und Viele Grüße

Re: Export - Berechnung - Import von SQL-Daten

Verfasst: Freitag 12. Januar 2018, 16:16
von __deets__
Wieso willst du denn was speichern?

Und deine Berechnung ist jetzt nix was deine DB nicht gleich on-the-fly erledigen koennen sollte, ganz ohne Python. Was fuer eine DB benutzt du denn?

Re: Export - Berechnung - Import von SQL-Daten

Verfasst: Freitag 12. Januar 2018, 16:22
von Algha
Ja speichern war falsch ausgedrückt, meinte damit so etwas wie in Arbeitsspeicher laden für die Berechnung :)

Genutzt wird eine MySQL Datenbank.

Re: Export - Berechnung - Import von SQL-Daten

Verfasst: Freitag 12. Januar 2018, 16:25
von __deets__
Na dann hier:

https://dev.mysql.com/doc/refman/5.7/en ... y-ref.html

findet sich alles, inklusive https://dev.mysql.com/doc/refman/5.7/en ... unction_if

Und ein bisschen googeln um rauszufinden wie man mit Python und MySQL arbeitet hast du bestimmt nur vergessen...

Re: Export - Berechnung - Import von SQL-Daten

Verfasst: Freitag 12. Januar 2018, 16:35
von Algha
Es war ja zu Beginn auch die Frage ob man das MySQL selbst berechnen lassen soll oder halt über Python :)

Frage kommt auch daher da es zum Teil schon Berechnungen gibt (mit Python 2 wo der Code aber für mich Bahnhof ist) und wieso dann dies so gemacht wurde und nicht mit MySQL direkt.

Re: Export - Berechnung - Import von SQL-Daten

Verfasst: Freitag 12. Januar 2018, 16:47
von __deets__
Was die eigentliche Frage ist, kann ja nun keiner wissen, wenn du weder Kontext noch den bestehenden Code lieferst.

Und warum nun jemand eine bestimmte Entscheidung getroffen hat, das so oder so zu implementieren - das solltest du ggf. denjenigen selbst fragen.

Denn der Grund etwas im einen oder anderen zu machen hat natuerlich viel mit persoenlichen Vorlieben zu tun, und ggf ein paar technischen (aber weniger, als man denkt...). Es in Python zu machen lohnt sich dann, wenn man entweder kein SQL kann, und das nicht lernen will (persoenlich), oder wenn es in der DB schwieriger ist als in Python - was auch wieder viel mit Vorlieben und Kenntnissen zu tun hat. Das schoene Gleichnis dazu ist ja das bekannte "Wenn alles was du ist ein Hammer ist, sieht jedes Problem wie ein Nagel aus".

Was dein konkretes Problem angeht: wenn das in Excel (da nehme ich mal an kommt das her) geht, sollte das auch in der DB gehen.

In dem Moment, wo es siginifikante Mengen an Berechnungsschritten gibt mit eigenen Datenstrukturen und komplexer Logik, verschiebt sich das Ganze Richtung Programmiersprache. Aber fuer's gezeigte wuerde ich das in der DB machen.

Re: Export - Berechnung - Import von SQL-Daten

Verfasst: Freitag 12. Januar 2018, 19:01
von Algha
Fragen wie der Code funktioniert ist nicht mehr möglich. Warum er das ganze mit Python gemacht hat kann ich nur abschätzen das er Python vielleicht mehr mochte. Da er Programmierer war gehe ich mal von aus das auch SQL kein Problem gewesen wäre.

Ich selbst habe nur Erfahrung mit SQL was einfachere Abfragen betrifft. Ich wüsste jetzt zum Beispiel nicht wie ich in MySQL Summe von Value(kanal1) und Value (kanal2) berechne und als Value (kanal3) in die DB schreibe mit dem passenden Datum.

channel1 datum123 value
channel2 datum123 value

Daher der Gedanke das ganze mit Python zu versuchen und dadurch Python lernen. Mir würde ja eine Struktur helfen wie man vorgehen sollte am besten :)

Re: Export - Berechnung - Import von SQL-Daten

Verfasst: Freitag 12. Januar 2018, 19:26
von __deets__
SELECT A + B FROM TABELLE;

Das wars. Wenn A und B in Tabelle sind. Wenn A und B aus einer komplexeren Abfrage rausfallen, ist das aber auch nicht anders.

Steht auch alles in der von mir verlinkten Dokumentation:

https://dev.mysql.com/doc/refman/5.7/en ... rator_plus

Kannst du sofort in deinem SQL-Frontend ausprobieren. Und dann dich weiter Vorarbeiten Schritt für Schritt bis die ganze Formel drin ist.

Wenn das steht, kannst du entscheiden ob du C immer berechnen willst, oder ob du es per INSERT oder UPDATE in die DB schreibst - die Ausdrücke funktionieren da auch.

Re: Export - Berechnung - Import von SQL-Daten

Verfasst: Samstag 13. Januar 2018, 02:04
von DasIch
Algha hat geschrieben:Da er Programmierer war gehe ich mal von aus das auch SQL kein Problem gewesen wäre.
Sehr gewagte Annahme. Die meisten Programmierer kennen SQL, wenn überhaupt aus Exceptions ihres ORMs.

Selbst bei den Leuten die SQL können hört es bei CTEs, subqueries und window functions schnell auf.