Seite 1 von 1

Datenbankzugriff in häufig instanziertem Objekt

Verfasst: Sonntag 2. September 2007, 16:19
von alan
Hallo

ich spiel gerade mit sqlite und wollte eine Klasse book machen, die die Datenbankanbindung kapselt:

Ich stell mir das ungefähr so vor:

Code: Alles auswählen

class book(object):
    def __init__(self):
        self.name = None
        self.isbn = None
        self.autor = None
        self.verlag = None
        self.kategorie = None

    def commit():
        # self.name, self.isbn, usw. in sqlite-db schreiben
Ich mach mir allerdings Sorgen, weil es potenziell ziemlich viele Instanzen von book geben könnte (z.B. wenn aus einer Datei eine ganze Liste von Büchern importiert wird.). Wenn in book.commit() jedesmal eine Verbindung zur db geöffnet und wieder geschlossen wird, ist das wohl eher ungünstig. Andererseits ist es auch möglich, dass zwischen zwei Zugriffen viel zeit vergeht, wenn Daten manuell eingegeben werden und man sich zwischendrin mal einen Kaffee holt.

Wo/Wann sollte ich also die Verbindung zur DB aufbauen/schließen und wann offenhalten?

Verfasst: Sonntag 2. September 2007, 17:41
von BlackJack
Wenn Du diese beiden Szenarien hast, dann ist der Entwurf vielleicht nicht so toll. Für *viele* Bücher die auf einen Schlag in die DB sollen würde ich nämlich `executemany()` mit einem anschliessenden `commit()` verwenden. Das ginge aber nur von ausserhalb eines `Book`-Objekts, weil man dafür ja mehrere Bücher braucht. Du könntest ein `Books`-Objekt verwenden, dass sich erst einmal alle neu hinzugefügten Bücher extra merkt und eine Methode besitzt um sie in die Datenbank zu schreiben.

Re: Datenbankzugriff in häufig instanziertem Objekt

Verfasst: Sonntag 2. September 2007, 20:52
von Leonidas
Hallo alan,
alan hat geschrieben:Wo/Wann sollte ich also die Verbindung zur DB aufbauen/schließen und wann offenhalten?
nimms mir nicht übel aber ich muss an der Stelle eine Gegenfrage stellen. Warum? Wozu baust du einen Wrapper um deine Daten der die dann in ein RDBMS mappt?

Versteh mich nicht falsch, aber wenn ich Daten in eine relationale Datenbank schreiben will, dann nehme ich einfach ein ORM. Warum? Weil es in Python einige sehr gute ORMs gibt. Weil sich andere schon über dieses Problem Gedanken gemacht haben. Weil wenn ich es selbst implementiere es sicherlich nicht so schnell besser wird als andere. Weil mir die Zeit dazu zu schade ist, ein ORM zu schrieben, wo es schon so viele gibt.

Das wären so meine Gedanken.

Verfasst: Montag 3. September 2007, 10:50
von alan
Ich glaube, ihr habt mich davon abgebracht..ich werde das etwas einfacher machen. An irgendwelche Frameworks wage ich mich momentan lieber noch nicht heran.