Seite 1 von 1

Speicherort

Verfasst: Donnerstag 10. April 2008, 13:30
von Brafil
hi, jetzt wollte ich etwas fragen. In meinem Prog gibt es bis zu 500 instanzen einer klasse. Ich wollte deshalb fragen, wo ich sie speichern kann, aber nicht
im Code. Wäre eine Datenbank (nix ahnung :? ) geeigtnet?

Verfasst: Donnerstag 10. April 2008, 13:44
von Hyperion
Müssen die denn zwangsweise persistent sein? Wenn nicht - wozu speichern?
Am einfachsten wäre da wohl pickle.

Die Frage, die sich mir sofort stellt ist folgende: Nutzt Du hier Klassen als Datenspeicher? Wenn ja, solltest Du in Erwägung ziehen, die Daten in eine Datei / DB auszulagern und nur bei Bedarf zu laden / speichern.

Verfasst: Donnerstag 10. April 2008, 13:59
von Brafil
Also die Instanzen sind die Hauptobjekte. deshalb sollte ich sie doch in Datenbanken speichern? Wenn ja, wo gibts denn ein Anfängertut?

Verfasst: Donnerstag 10. April 2008, 14:02
von Hyperion
Wo kommen denn die Daten für diese "Hauptinstanzen" her?
Hast Du so was in der Art:

Code: Alles auswählen

Class A:
....

a1 = A()
a2 = A()
a3 = A()
...
an = A()
Wenn ja, machst Du was falsch :-D
Du legst doch die Instanzen einer Klasse zu einem bestimmten Zweck an. Eine Instanz ohne spezielle Merkmale (sprich Attributwerte) ist ja an sich sinnlos. Also müssen diese Daten ja schon irgend wo herkommen. Es wäre hilfreich, wenn man darüber bescheid wüßte.

Verfasst: Donnerstag 10. April 2008, 14:05
von Brafil
Also die Instanzen haben schon Eigenschaften. Die müssen ja auch abgelesen werden können. Vielleicht in einer art Tabelle oder Datenbank?

Verfasst: Donnerstag 10. April 2008, 14:20
von helduel
Brafil hat geschrieben:Also die Instanzen haben schon Eigenschaften. Die müssen ja auch abgelesen werden können. Vielleicht in einer art Tabelle oder Datenbank?
Gibt es die Instanzen jetzt schon, oder soll es die erst noch geben?
Wenn es sie schon gibt: Woher kommen sie? Poste doch mal etwas Code.
Ob Datenbank, XML, CSV - es hängt von deinem Anwendungsfall ab, was am besten geeignet ist.

Verfasst: Donnerstag 10. April 2008, 14:48
von Brafil
Das ist mal ein Beispiel:

Code: Alles auswählen

class Schuler():

    def __init__(self, name, alter, klasse, **noten)

        self.name=name ........


Peter=Schuler("Peter Sowihso", "12", "8", Deutsch=1, Mathe=2 usw...)

Karl=Schuler(...)

... (500 Schuler)
Das wird alles in einer Tabelle ausgegeben. Fragt nicht wie :) Könnte man eine Datenbank mit den Schülern und ihren Eigenschaften füllen und das Programm liest sie dann ein als hätte ich jeden einzelnen im Code selbst definiert? Wenn ja, dann wie? Wenn nicht, dann wie sonst?

Verfasst: Donnerstag 10. April 2008, 16:39
von Leonidas
Brafil hat geschrieben:Könnte man eine Datenbank mit den Schülern und ihren Eigenschaften füllen und das Programm liest sie dann ein als hätte ich jeden einzelnen im Code selbst definiert?
Ja natürlich. Mittels Datenbanken oder pickle lässt sich das ja trivial lösen.

Verfasst: Donnerstag 10. April 2008, 16:58
von helduel
Kannst dir ja mal sqlite anschauen. Dann kriegst du ne Idee davon.

Verfasst: Donnerstag 10. April 2008, 17:44
von lunar
helduel hat geschrieben:Kannst dir ja mal sqlite anschauen. Dann kriegst du ne Idee davon.
Naja, wenn man schon Objekte hat, ist es doch idiotisch, diese manuell in eine Datenbank zu speicher. Wozu gibt es ORMs?

Und nein, bitte nicht das Komplexitätsargument herausholen: SQLAlchemy ist bei einfachen Sachen nicht komplexer, eher sogar einfacher als manuelle SQL-Statements ;)

Verfasst: Donnerstag 10. April 2008, 22:44
von Leonidas
lunar hat geschrieben:Und nein, bitte nicht das Komplexitätsargument herausholen: SQLAlchemy ist bei einfachen Sachen nicht komplexer, eher sogar einfacher als manuelle SQL-Statements ;)
Mag sein. Doch ActiveRecord-style ORMs sind oft simpler zu verstehen als SQLAlchemy.

SQLAlchemy ist durchaus eine gute Wahl, doch ist meine Faszination davon nicht so groß, dass ich es allen uneingeschränkt empfehlen würde.