Flask SQLalchemy

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
Doubarry
User
Beiträge: 4
Registriert: Freitag 30. Juni 2023, 07:26

Moin,

ich bin ganz neu hier, bis jetzt konnte ich immer alle Fragen im Netz finden aber hier geht es um eine Verständnisfrage bei der ich nicht mal wieß wie ich diese genau formulieren müsste um das gewünschte Ergebnis per Suche zu finden.

Kurze Beschreibung meines bestehenden Projekts:
Ich habe mittels Python und Flask eine Webanwendung entwickelt welche uns den Arbeitsaufwand an der Arbeit erheblich erleichern soll.
Grundsätzlich haben wir je Kunden mehrere Vordienstleister welche alle immer die Stammdaten unserer Kunden benötigen, damit wir aber nicht mehr bei jedem Vordienstleister einzeln die Daten eingeben müssen habe ich dieses Projekt begonnen.
Die Vordienstleister sind alle per API ansprechbar.
Im Hintergrund läuft eine SQL-Datenbank, angesprochen wird diese per SQLalchemy.
(Datensicherheit: Das System ist vorab nur lokal im Unternehmen ansprechbar, zukünftig ggf. per VPN, alle Personenbezogenen Daten sind pseudonymisiert in der Datenbank hinterlegt, die Anwendung selbst ist durch einen Login geschützt mittels Hash-Passwort)

Nun meine Frage:
Nach der Eingabe der Daten werden diese in meine Datenbank geschrieben, zeitgleich wird bei dem Vordienstleister_1 und Vordienstleister_2 der Stammdatensatz des Kunden angelegt.
Damit bei dem VL_1 nun die Eintragung vervollständigt werden kann, muss beim VL_2 ein Datum in der Zukunft (meist 2-3 Wochen) bestätigt/von diesem gesetzt werden.
(In sehr seltenen Fällen, kann dieses Datum sogar nach ablauf dessen verschoben werden)

Meine Idee war nun ein Script anzulegen welches periodisch abfragt ob das Datum bei VL_2 gesetzt wurde, wenn ja führe die Datenvervollständigung aus eigener DB bei VL_1 fort.

Die Anwendung läuft in einer virtuellen Umgebung als env.

Ist diese Idee gut?
Gibt es hier eine smartere Lösung?
Wie triggere ich das Script? (per cron-job?), (gibt es hier innerhalb der env eine Lösung?)

Besten Dank vorab für eure Unterstützung!
Benutzeravatar
__blackjack__
User
Beiträge: 13116
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Doubarry: Das Skript könnte man als Command in Flask integrieren, dann hätte man auch Zugriff auf die App und Konfiguration und so weiter (https://flask.palletsprojects.com/en/2. ... m-commands).

Aufrufen per Cron-Job oder Systemd-Timer-Unit. Und dort das flask aus dem ``bin/``-Ordner des venv angeben, dann wird das venv auch aktiviert/benutzt.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Doubarry
User
Beiträge: 4
Registriert: Freitag 30. Juni 2023, 07:26

@__blackjack__:

vielen Dank für die schnelle Antwort, also ist die Variante mit einer extra Datei, welche sich in dem Projektordner befindet mit Cron/Systemd-timer die einfachste/beste Lösung!?

Hier habe ich auch etwas zu dem Thema gefunden, falls es jamand anderen auch interessiert:
https://stackoverflow.com/questions/328 ... virtualenv

Das mit dem Command schaue ich mir mal an, danke für den Hinweis!
Wäre ja eine feine Sache das Script direkt nach einer Änderung zu triggern, dann braucht man nicht ggf auf den Timer von 5 oder 10Min zu warten...
Ich will den Status auch nicht zu oft abfragen, da bedankt sich sicherlich der VL.

Gruß
Benutzeravatar
__blackjack__
User
Beiträge: 13116
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Doubarry: Ein Flask-Command wäre ja nicht unbedingt eine Extra-Datei im Projektordner. Das würde man ja mit in das Projekt integrieren. Ob nun als extra Modul oder nicht, steht einem frei.

Wichtig ist, dass man das venv benutzt, also entweder aktivieren, oder irgendeines der Programme aus dem venv-``bin/``-Verzeichnis. Egal ob das nun das ``python`` von dort, oder das ``flask`` ist, falls man es als Flask-Command implementiert.

Cron/Systemd sind halt schon da für solche Aufgaben, also macht es IMHO Sinn die zu nutzen.

Woher willst Du denn die Änderung wissen wenn nicht durch regelmässiges abfragen? Falls der VL da keine Pushbenachrichtigung in irgendeiner Form anbietet, bleibt ja nur regelmässig abfragen. Wie oft man abfragen darf/sollte steht ja meistens in den API-Beschreibungen.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Doubarry
User
Beiträge: 4
Registriert: Freitag 30. Juni 2023, 07:26

@__blackjack__:

dann werde ich es per Cron/Systemd lösen, ich denke aber schon als eigene Datei, empfinde ich als "aufgeräumter".

Es kann sein dass der Anwender Änderungen bei VL_1 einpflegen muss oder auch bei VL_2 noch in der Zeit in der das Datum weiterhin nicht bekannt ist. somit könnte diese Datei mit seinen Funktionen ja getrigert werden um diese Änderungen ebenfalls einzupflegen.
Die Idee dahinter ist folgende, ich erstelle eine weitere Tabelle in meiner DB welche immer die Kundennummer beinhaltet und zusätzlich die Änderung welche mit den VL's abgeglichen werden muss,
dies würde die Bedienung der eigenen Anwendung extrem flüssig gestalten, wenn nicht immer nach einer Eingabe auf den Response des VL gewartet werden muss.

Aber vll. ist die Idee auch nicht ganz gut!?
Benutzeravatar
__blackjack__
User
Beiträge: 13116
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Doubarry: Ich bin mir jetzt nicht ganz sicher ob ich das „als eigene Datei“ richtig verstehe.

Flask bietet ja die Infrastruktur um die Konfiguration der Webanwendung in allen möglichen Formen einzubinden, also so Sachen wie Zugangsdaten zur eigenen Datenbank, und in Deinem Fall wahrscheinlich auch Zugangsdaten zu den VLs, die ja auch direkt in der Webanwendung benötigt werden. Und falls es nicht ganz simpel ist, wird es für die APIs in der Webanwendung wahrscheinlich auch eine kleine Abstraktionsschicht und/oder kleine Hilfsfunktionen geben. Und die DB-Model-Klassen für Deine Datenbank. Das alles möchte man ja auch in dem Cron-Job haben. Deshalb macht das IMHO auf jeden Fall Sinn als Flask-Command, wenn man etwas hat, das so viel braucht was auch in der Webanwendung zur Verfügung steht. Man muss sich keine Gedanken machen wie man das alles noch mal in einem ”frei” stehenden Skript zur Verfügung stellt.

Mit ``flask`` hat man auch gleich ein Programm, das man starten kann und wo die Aktivierung des venv schon implizit ist. Und über die Kommandozeilen-API von Flask ist das auch leicht auffindbar/konsistent dokumentierbar. Wenn man in der ``crontab`` so etwas wie ``cd /path/to/project && .venv/bin/flask housekeeping`` findet, weiss man auch gleich, dass man in dem venv ``flask housekeeping --help`` aufrufen kann um mehr Infos dazu zu bekommen. Und ``flask --help`` um zu sehen ob es neben dem ``housekeeping``-Kommando vielleicht noch andere zusätzliche Kommandos gibt und was die machen.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Doubarry
User
Beiträge: 4
Registriert: Freitag 30. Juni 2023, 07:26

@__blackjack__:

also das mit dem Command muss ich mir erstmal noch in Ruhe anschauen, es liest sich erstmal so. als ob es genau das ist was ich brauche.

Mit einer eigenen Datei meine ich nur in dem apps Ordner meiner Anwendung gibt es jetzt schon einen Ordner tools in dem viele Funktionsdateien liegen, wie der Zugriff auf die APIs der VLs usw, da würde ich diese auch hinterlegen,
aber eben als eigenständige Datei und nicht einfach eine Funktion in einer der anderen Dateien.
Antworten