Datenbankzugriff in häufig instanziertem Objekt

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
alan
User
Beiträge: 81
Registriert: Dienstag 10. April 2007, 11:30

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?
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.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
alan
User
Beiträge: 81
Registriert: Dienstag 10. April 2007, 11:30

Ich glaube, ihr habt mich davon abgebracht..ich werde das etwas einfacher machen. An irgendwelche Frameworks wage ich mich momentan lieber noch nicht heran.
Antworten