2009-08-23 6 views
3

Anstatt einen ORM zu verwenden, erwäge ich den folgenden Ansatz in Python und MySQL ohne ORM (SQLObject/SQLAlchemy). Ich würde gerne ein Feedback darüber erhalten, ob dies wahrscheinlich negative langfristige Folgen haben wird, da es in der kurzfristigen Sicht meines Erachtens gut scheint.Ist das ein guter Ansatz, um SQLAlchemy/SQLObject zu vermeiden?

Anstatt eine Zeile aus der Datenbank in ein Objekt übersetzen:

  • jede Tabelle durch eine Klasse repräsentiert wird
  • eine Zeile als
  • dict abgerufen wird
  • ein Objekt einen Cursor Zugriff bietet repräsentiere wie so zu einer Tabelle:

    cursor.mytable.get_by_ids (low, high)

  • Entfernungsmittel, die time_of_removal auf die aktuelle Zeit

So Wesentlichen Dies entfällt die Notwendigkeit für ein ORM einstellen, da jeder Tabelle, die eine Klasse, sie zu vertreten hat und innerhalb dieser Klasse stellt eine separate dict jede Zeile.

Typ-Mapping ist trivial, da jedes dict (row) ein Objekt der ersten Klasse in Python/blub ist, damit Sie die Klasse des Objekts kennen und außerdem die Low-Level-Datenbankbibliothek in Python die Konvertierung von Typen übernimmt die Feldebene in die entsprechenden Typen auf Anwendungsebene.

Wenn Sie irgendwelche potenziellen Probleme mit dem Weg auf dieser Straße sehen, lassen Sie es mich bitte wissen. Vielen Dank.

Antwort

8

Das beseitigt nicht die Notwendigkeit eines ORM. Das ist ein ORM. Warum erfinden Sie das Rad neu?

Gibt es einen zwingenden Grund, warum Sie versuchen, die Verwendung eines etablierten ORM zu vermeiden?

+0

Nun, in erster Linie will ich nicht alle die Ins und Outs eines ORM vor allem lernen, wenn ich nicht mehr als 90% der Funktionalität benötigt, die es definiert. Aus demselben Grund bevorzuge ich Microsoft Word die meiste Zeit über den Editor. – tirus

+6

Nun, lerne das nicht zu 90%. Es ist immer noch erstaunlich nützlich, es herum zu haben, wenn Sie es jemals brauchen. Wenn ich übrigens von Textbearbeitung redete, hatte ich ungefähr die gleiche Einstellung, als ich Vim ausprobierte; Ich habe genug gelernt, um mich bewegen und tippen und das war es. Aber ich fand immer fortgeschrittenere Dinge, die ich machen wollte, ging zu lernen, wie man sie effizient macht, und jetzt bin ich ein Vim Ninja. Ein Vimja, wenn du willst. – Eevee

+2

Die Verwendung eines ausgereiften ORM hat große Vorteile, da es reif, gut getestet und gut dokumentiert ist. Wenn Sie das Rad neu erfinden, bedeutet dies, dass Sie von vorne anfangen, und noch einmal, und jeder, der Ihren Code abholt, lernt jetzt Ihr ORM, aber ohne die Vorteile umfangreicher Dokumentationen und Tutorials. – Soviut

2

Sie werden weiterhin SQLAlchemy verwenden. ResultProxy ist eigentlich ein Wörterbuch, wenn Sie sich für .fetchmany() oder ähnliches entscheiden.

Verwenden Sie SQLAlchemy als ein Tool, das das Verwalten von Verbindungen sowie das Ausführen von Anweisungen erleichtert. Die Dokumentation ist in Abschnitten ziemlich getrennt, so dass Sie nur den Teil lesen, den Sie brauchen.

0

web.py hat in einer anständigen DB Abstraktion auch (kein ORM). Abfragen werden in SQL geschrieben (nicht für alle rdbms), aber Ihr Code bleibt mit allen unterstützten dbs kompatibel (sqlite, mysql, postresql und andere).

von http://webpy.org/cookbook/select:

myvar = dict(name="Bob") 
results = db.select('mytable', myvar, where="name = $name")