Grundsätzliche Frage zur Programmierung mit DB

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
arti73
User
Beiträge: 20
Registriert: Montag 12. September 2016, 12:20

Moin,

ich hab ne grundsätzliche Frage zum Code-Design bei Benutzung von SQLite. Wenn ich eine Benutzeroberfläche schreibe, an welcher Stelle öffne ich die Datenbank. In der main() und greife von den jeweiligen Unterklassen der GUI darauf zu (bspw. durch Übergabe des Namens)?

Oder ist es sinnvoller, die DB in den jeweiligen Unterfenstern zu öffnen: beispielsweise bei einem Fenster zur Mitgliedererfassung für einen Verein zu öffnen, dort den neuen Datensatz anzulegen und die Verbindung dort auch wieder zu beenden?

Fragen über Fragen :)

Danke
arti73
Sirius3
User
Beiträge: 17737
Registriert: Sonntag 21. Oktober 2012, 17:20

@arti73: Datenbankzugriffe schreibt man überhaupt nicht direkt in die GUI-Klassen, sondern kapselt das in eigenen Funktionen/Klassen. Am besten verwendest Du auch nicht SQLite direkt, sondern über SQL-Alchemy. Dort ist es üblich, für jede Aufgabe eine eigene Session zu erzeugen, da diese intern effizient in einem Session-Pool verwaltet werden.
arti73
User
Beiträge: 20
Registriert: Montag 12. September 2016, 12:20

Oh Herre, ja les ich mir durch :shock:
arti73
User
Beiträge: 20
Registriert: Montag 12. September 2016, 12:20

Jetzt mal abgesehen von Alchemy, das muss ich mal in Ruhe ran. Alles auf einmal geht nicht ... :?

Wenn ich das bspw. mit SQLite (oder Pickle) direkt implementieren will, würde ich entsprechende Funktionen (oder Klassen) schreiben, denen ich aus der GUI-Klasse die Daten der Input-Felder mitgebe und so den Code im Sinne von MVC trennen würde? Habe ich das richtig verstanden?

Vielleicht mach ich das Ganze auch erstmal mit Pickle, da die Zahl der Datensätze sowieso die 1.000 wohl nicht übersteigen wird. Aber durch die Trennung müsste ich später nur das Modul ändern und könnte auf DB umstellen.

Ich hoffe, ich stell mich nicht zu doof an :D
BlackJack

@arti73: Pickle würde ich für die dauerhafte Datenspeicherung nicht verwenden. Wenn man etwas an den Klassen ändert, kann es passieren das die alten Daten nicht mehr zu den veränderten Klassen passen. Das kann man umgehen in dem man nur Grunddatentypen serialisiert, aber dann stellt sich schnell die Frage warum in so einem exotischen Format und nicht lieber einen Standard wie JSON oder XML. Falls Du nur eine Tabelle hast wäre CSV eventuell sogar eine Möglichkeit. Wenn Du allerdings mehrere Tabellen hast, deren Einträge zusammenhängen, dann würde ich gleich eine relationale Datenbank verwenden. Und auch gleich das ORM von SQLAlchemy verwenden, sonst schreibt man am Ende nur eine Menge Code der das alles selbst macht, was man dort schon fertig bekommt.
arti73
User
Beiträge: 20
Registriert: Montag 12. September 2016, 12:20

Alles klar, ja, hängt zusammen. Also schau ich mir Alchemy an.

Thx :)
Benutzeravatar
snafu
User
Beiträge: 6736
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

arti73 hat geschrieben:Jetzt mal abgesehen von Alchemy, das muss ich mal in Ruhe ran. Alles auf einmal geht nicht ...
Ja, klar. Erst lowlevel selber schreiben und erst dann auf das ORM portieren , oder wie? Fang lieber gleich mit dem ORM an. Du schreibst die Dinge ja wohl auch nicht zuerst in C, um sie später mal auf Python zu portieren.
arti73
User
Beiträge: 20
Registriert: Montag 12. September 2016, 12:20

Ja, ist ja gut :lol:. Ihr habt mich überredet :)
Antworten