Würde eine gute Praxis darin bestehen für jede Tabelle eine eigene Klasse zu erstellen? Wenn ja, was sind die besten Praktiken für Laden/Speichern solcher Klassen zurück in die in die Datenbank ohne ein Orm?
Sie verwenden ORM. Sie bilden Objekte auf relationale Tabellen ab. Ob Sie dazu eine vorgefertigte Bibliothek verwenden oder nicht, ist Ihre Entscheidung. Wenn Sie dies nicht tun, implementieren Sie im Grunde genommen selbst eine ORM, wenn auch wahrscheinlich ohne den ganzen Schnickschnack der bestehenden ORMs.
Die beiden gebräuchlichsten Methoden hierfür sind das ActiveRecord-Muster und das Data-Mapper-Muster. Beide haben ihre Vor- und Nachteile.
Mit dem ActiveRecord-Muster definieren Sie Klassen, deren Attribute die Tabellenspalten für Sie definieren. Jede Instanz dieser Klasse entspricht einer Zeile in der Datenbank, und indem Sie eine neue Instanz erstellen (und speichern), legen Sie eine neue Zeile in der Datenbank an. Weitere Informationen dazu finden Sie hier: http://en.wikipedia.org/wiki/Active_record_pattern
Beim Data-Mapper-Muster definieren Sie Tabellenobjekte für jede Tabelle und schreiben Mapper-Funktionen, die Spalten der Tabelle bestehenden Klassen zuweisen. SQLAlchemy verwendet dieses Muster standardmäßig (obwohl es ActiveRecord-Typ-Erweiterungsmodule gibt, die die Funktionalität von SQLAlchemy an eine andere Schnittstelle anpassen. Eine kurze Einführung in dieses Muster findet sich in der Dokumentation von SQLAlchemy hier: http://www.sqlalchemy.org/docs/05/ormtutorial.html (lesen Sie von Anfang an bis zum Abschnitt "Tabelle, Klasse und Mapper auf einmal deklarativ erstellen", der ActiveRecord mit SQLAlchemy erklärt).
Das ActiveRecord-Muster ist einfacher einzurichten und zu verwenden und gibt Ihnen Klassen, die eindeutig für Ihre Datenbank repräsentativ sind, was Vorteile in Bezug auf die Lesbarkeit hat. Als Nebeneffekt dient die deklarative Natur der ActiveRecord-Klassen als klare und einfache Dokumentation für Ihr Datenbankschema.
Das Data-Mapper-Muster bietet Ihnen weitaus mehr Flexibilität bei der Zuordnung Ihrer Daten zu Ihren Klassen, so dass Sie nicht an eine mehr oder weniger eins-zu-eins-Beziehung zwischen Tabellen und Klassen gebunden sind. Außerdem trennt es Ihre Persistenzschicht von Ihrem Geschäftscode, was bedeutet, dass Sie später andere Persistenzmechanismen austauschen können, falls dies erforderlich ist. Das bedeutet auch, dass Sie Ihre Klassen leichter testen können, ohne dass Sie eine Datenbank für sie einrichten müssen.
Für eine ausführlichere Diskussion über die Mapper-Konfiguration von SQLAlchemy lesen Sie bitte http://www.sqlalchemy.org/docs/05/mappers.html . Auch wenn Sie nicht vorhaben, eine Bibliothek wie SQLAlchemy zu verwenden, sollte die Dokumentation Ihnen helfen, einige der Optionen zu erkennen, die Sie bei der Zuordnung Ihrer Klassen zu Datenbanktabellen in Betracht ziehen sollten.