Guter Rat zu SQLAlchemy gesucht: Core oder ORM?
Verfasst: Freitag 28. Februar 2025, 17:03
Das gehört weder richtig zur Datenbankprogrammierung noch zu Qt/KDE. Und die Frage in beiden Foren zu stellen wäre allemal verkehrt. Also hier.
Ich bin dabei, eine Datenbankanwendung von WPF / C# auf Python umzustellen, weil mir C# mit jeder neuen Version schlimmer auf die Nerven geht. Außerdem kenne ich Python besser und schon sehr viel länger.
Potentiell wichtige Eigenschaften von Datenbank und Programm:
- Einziger Benutzer und "Datenbankadministrator" bin ich selbst. Das heißt, ich will keine falschen Daten in die Datenbank hineinkriegen, ohne es zu merken, Abstürze o.ä. sind aber kein Drama und an der Oberfläche kann ich nach meinen Wünschen drehen. Im Grunde bleibt das Programm eine Testversion, so lange es lebt. Und für so einen Umgang mit Programmen eignet sich C# m.E. nicht und ist dafür auch nicht gedacht.
- Datenbanksystem ist PostgreSQL, allerdings wäre eine Umstellung auf SQLite möglicherweise eine ganz gute Idee. Die Datenbank ist klein und dürfte dauerhaft klein bleiben.
- Als GUI ist PyQt vorgesehen, damit kenne ich mich vergleichsweise noch am besten aus. Die SQL-Komponenten von Qt will ich aber nicht benutzen: für PostgreSQL unter Windows scheinen sie im Pyqt6-Paket gar nicht drin zu sein, und im übrigen finde ich sie auch nicht wirklich praktisch.
- Ich kenne mich mit SQL durchaus ganz gut aus, so weit es weder um Parallelbetrieb noch um ernsthaft große Datenmengen geht. Aber bei der Aktualisierung von psycopg2 auf psycopg 3 musste ich in einem anderen Programm doch ziemlich viel an verstreuten Stellen ändern. Und eine mögliche Umstellung auf SQLite ist ganz sicher ein Grund, SQLAlchemy zu benutzen - obwohl (oder weil) ich damit noch kaum Übung habe.
- Die Frage "Core oder ORM?" stellt sich deshalb, weil ich zwar QtSql vermeiden, aber die Model-View-Komponenten von PyQt sehr wohl benutzen will (oder sogar muss?). Weil die ursprüngliche Anwendung das Entity Framework benutzt, habe ich zuerst etwas blindlings ORM-Klassen definiert und habe sie auch erfolgreich mit einem PyQt-GUI verbunden - aber es kommt mir nicht wirklich vernünftig vor. Die PyQt-Model-Klassen wollen doch die Daten in einer Tabellenform bekommen, wie sie eher von den Core-Methoden von SQLAlchemy geliefert werden - ORM-Abfrageergebnisse müssen erst in ihre Felder zerlegt werden. Allerdings kann man natürlich verknüpfte Daten bequemer mitliefern.
Das war jetzt vielleicht etwas länglich, aber ich wollte Hintergrund zu der Frage liefern.
Ich bin dabei, eine Datenbankanwendung von WPF / C# auf Python umzustellen, weil mir C# mit jeder neuen Version schlimmer auf die Nerven geht. Außerdem kenne ich Python besser und schon sehr viel länger.
Potentiell wichtige Eigenschaften von Datenbank und Programm:
- Einziger Benutzer und "Datenbankadministrator" bin ich selbst. Das heißt, ich will keine falschen Daten in die Datenbank hineinkriegen, ohne es zu merken, Abstürze o.ä. sind aber kein Drama und an der Oberfläche kann ich nach meinen Wünschen drehen. Im Grunde bleibt das Programm eine Testversion, so lange es lebt. Und für so einen Umgang mit Programmen eignet sich C# m.E. nicht und ist dafür auch nicht gedacht.
- Datenbanksystem ist PostgreSQL, allerdings wäre eine Umstellung auf SQLite möglicherweise eine ganz gute Idee. Die Datenbank ist klein und dürfte dauerhaft klein bleiben.
- Als GUI ist PyQt vorgesehen, damit kenne ich mich vergleichsweise noch am besten aus. Die SQL-Komponenten von Qt will ich aber nicht benutzen: für PostgreSQL unter Windows scheinen sie im Pyqt6-Paket gar nicht drin zu sein, und im übrigen finde ich sie auch nicht wirklich praktisch.
- Ich kenne mich mit SQL durchaus ganz gut aus, so weit es weder um Parallelbetrieb noch um ernsthaft große Datenmengen geht. Aber bei der Aktualisierung von psycopg2 auf psycopg 3 musste ich in einem anderen Programm doch ziemlich viel an verstreuten Stellen ändern. Und eine mögliche Umstellung auf SQLite ist ganz sicher ein Grund, SQLAlchemy zu benutzen - obwohl (oder weil) ich damit noch kaum Übung habe.
- Die Frage "Core oder ORM?" stellt sich deshalb, weil ich zwar QtSql vermeiden, aber die Model-View-Komponenten von PyQt sehr wohl benutzen will (oder sogar muss?). Weil die ursprüngliche Anwendung das Entity Framework benutzt, habe ich zuerst etwas blindlings ORM-Klassen definiert und habe sie auch erfolgreich mit einem PyQt-GUI verbunden - aber es kommt mir nicht wirklich vernünftig vor. Die PyQt-Model-Klassen wollen doch die Daten in einer Tabellenform bekommen, wie sie eher von den Core-Methoden von SQLAlchemy geliefert werden - ORM-Abfrageergebnisse müssen erst in ihre Felder zerlegt werden. Allerdings kann man natürlich verknüpfte Daten bequemer mitliefern.
Das war jetzt vielleicht etwas länglich, aber ich wollte Hintergrund zu der Frage liefern.