Verständnisfrage: Migration der Datenbank

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
Benutzeravatar
Sophus
User
Beiträge: 1109
Registriert: Freitag 25. April 2014, 12:46
Wohnort: Osnabrück

Hallo Leute,

wir stellen uns folgende Situation vor. Eine Desktop-Anwendung wurde programmiert und zur Verteilung online zur Verfügung gestellt. Sagen wir mal, rund 50 Personen benutzen das Programm auf ihren Rechnern. Diese Anwendung arbeitet mit der Datenbank. Das Programm benutzt SQLAlchemy, um mit der Datenbank kommunizieren zu können. Nun, während der Entwicklungsphase bemerke ich, dass das Schema der Datenbank geändert werden muss. Zum Beispiel muss die vorhandene Tabelle umbenannt werden, oder es muss ein weiteres Feld in einer vorhandenen Tabelle hinzugefügt, gelöscht oder gar bearbeitet werden oder oder oder... Nun, es gibt ja das Werkzeug namens alembic. Klingt auch verlockend, weil dieses Werkzeug auch wunderbar mit SQLAlchemy harmonisiert. Nur ein kleines Problem, alembic funktioniert auf Basis der Kommandozeilen und mit der INI-Datei, in welcher unter anderem die Zugangsdaten zur Datenbank eingetragen werden muss. Auch muss bei alembic eine Umgebung eingerichtet werden und einiges mehr. Und das kann ich den Anwendern kaum zumuten. Wäre mehr als unzumutbar, um nicht zu sagen sehr unreundlich. alembic funktioniert nur sehr gut, wenn das Programm auch bei dem Entwickler bleibt, wie bei einer Web-Anwendung, aber nicht bei Desktop-Anwendungen, korrekt?

Und jetzt meine Frage an euch. Wie kann man solche Migrations-Situationen lösen? Habt ihr da alternative Vorschläge?
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@Sophus: alembic ist in Python geschrieben. Dass es auch ein Kommandozeilenwerkzeug ist, heißt nicht, dass man es auch aus einem selbst geschriebenen Programm heraus aufrufen kann. Ließ mal den API-Abschnitt in der Dokumentation.
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Zur Unterstreichung von Sirius3's Punkt: genauso hat mein Kollege das in unser automatisches Deployment integriert.
Benutzeravatar
Sophus
User
Beiträge: 1109
Registriert: Freitag 25. April 2014, 12:46
Wohnort: Osnabrück

Hallo,

ich habe mich ein wenig unbeholfen ausgedrückt. Es ist so, mein Programm wird als Exe-Datei weitergereicht. Und was mir bei alembic auffiel, ist, dass man erst einmal bei sich an seinem Entwicklungsrechner eine Umgebung einrichten und anschließen mit der INI-Datei arbeiten muss. Was weiss ich, wie die Zugangsdaten der End-Anwender sind? Außerdem wirkt die ganze Vorbereitung recht umständlich aud mich. Ich nahm an, man könnte aus dem eigenen Proframm heraus die Datenbank-Schemen verwalten. Wie sollte man dem Kunden alembic mit in die Hand drücken ubd sagen "Richten sie erstmal eine Umgebung ein, indem sie dies und jenes machen und ach ja, in der INI-Datei müssen sie auh noch rumschnüffeln und dann bitte führen sie das am Ende so und so aus". Ich nahm an, das alembic so konstruiert wurde, für Entwickler, deren Programme ihren Entwicklungsrechner nicht weit verlassen, eben Web-Anwendungen. Denn alembic arbeitet, soweit ich das vernehmen kann, "out of the box". Schließlich wird alembic über IMPORTS nicht in meine Desktop-Anwendung intergriert.
BlackJack

@Sophus: Doch genau das solltest Du machen, die API-Dokumentation lesen und dann Alembic importieren und verwenden.
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

@Sophus: wir haben dich schon genau verstanden. Und es gibt die Moeglichkeit, alembic aus dem laufenden Code der Anwendung aufzurufen & eine Migration durchzufuehren beim ersten Start nach dem Update. Das hat Sirius3 schon gesagt, und ich hab's bestaetigt.
Benutzeravatar
Sophus
User
Beiträge: 1109
Registriert: Freitag 25. April 2014, 12:46
Wohnort: Osnabrück

Hallo,

ich habe mich ein wenig in die Dokumentation von alembic durchgearbeitet, aber leider kein Tutorial gefunden, wo einem gezeigt wird, wie man alembic aus seinem Programm heraus anwenden kann. Während meiner Recherche fand ich über Google folgendes:
Using Alembic API from inside application code. Ich muss mich da ein wenig durchbeißen, ehe ich das wirklich verinnerlicht habe. Wenn ihr ein besseres Tutorial kennt, immer her damit.
Antworten