was macht sessionmaker()

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Benutzeravatar
pillmuncher
User
Beiträge: 1484
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

MoonKid hat geschrieben:ich möchte sqlalchemy als Biblitothek selbst auch kapseln. Wenn ich später sqlalchemy austauschen will, muss ich das nur in der einen Datenbankklasse tun. Der Rest des Codes bleibt unberührt.
YAGNI.
In specifications, Murphy's Law supersedes Ohm's.
MoonKid
User
Beiträge: 105
Registriert: Mittwoch 10. Dezember 2014, 16:24

YAGNI

Ja, das Konzept ist mir ein Begriff. Ich entwickle aber nicht unter einem Chef und für einen Kunden. Das bedeutet, ich kann mir ein gewisses Maß an Perfektionismus erlauben. ;)

Ich sehe kein großes Problem darin, die "Funktionalität" der Datenbank bzw. der Datenschicht in einer eigenen Klasse zu kapseln. Dadurch wird der Code nicht merklich komplexer und fehleranfälliger. Er wird dafür jedoch wartungsfreudiger, da die Schichten klarer getrennt sind.

Wo sollte ich den ein Session und Engine Objekt sonst hintun? In den "globalen" Namensraum oder "modul-global"? Nö, das Thema hatten wir schon!
BlackJack

@MoonKid: Also wenn ich das richtig verstanden habe beschwerst Du Dich das `sessionmaker()` eine überflüssige Indirektion ist deren Sinn du nicht siehst, verteidigst aber im gleichen Atemzug deine überflüssige Indirektion. ;-)

Das mit der Perfektion hast Du nicht richtig verstanden:
“A designer knows he has achieved perfection not when there is nothing left to add, but when there is nothing left to take away.”
-- Antoine de Saint-Exupéry
Irgendwas sinnfreies da reinzubasteln nur weil man's kann und weils nicht weiter stört ist kein Perfektionismus.

Was zum Henker willst Du denn da noch mehr trennen? SA ist doch selbst schon eine Schicht um von der Datenbank zu abstrahieren. Die Datenschicht besteht doch dann in der Regel aus ORM-Klassen.

Hatten wir das Thema mit `Session` so schon? Das Ergebnis von `sessionmaker()` ist eine Klasse. Genau wie das Ergebnis von `deklarative_base()`. Diese Klassenobjekte gehören auf Modulebene. Du musst einfach nur damit klar kommen das Klassen in Python a) Objekte sind und b) zur Laufzeit dynamisch erzeugt werden. Ob das nun durch die Ausführung einer ``class``-Anweisung oder durch einen Funktionsaufruf passiert ist egal.
Antworten