Was sind die lebensfähigen Datenbank-Abstraktionsschichten für Python

Ich fange an, mich in ein Open-Source-Projekt Gramps zu integrieren, die es erforscht, ihr Backend von BSDDB zu einer relationalen Datenbank zu wechseln. Entweder SQLite oder MySQL haben wir uns nicht ganz entschieden und können sogar versuchen, beides in einer begrenzten Kapazität zu tun. Ich bin ein professioneller Entwickler, aber ich bin neu in python so bin ich nicht so vertraut mit der aktuellen Auswahl an Tools / Bibliotheken. Ich habe mit der Erforschung von DB Abstraction Layers beauftragt. Es gibt derzeit eine Wiki-Diskussion, um sie zu vergleichen. Ein Objekt relationaler Mapper könnte nett sein, ist aber nicht unbedingt nötig. Obwohl ich weiß, das ist in der Regel auch mit einem DB Abstraktion Layer. Wenn ein ORM enthalten ist, müssen Ad-Hock-Abfragen ohne viel Ringen verfügbar sein.

Im Moment enthält die Liste:

CouchDB habe ich noch nicht in diese hineingesehen .

DB-API das scheint ein Standard-Python -API zu sein, und jeder db schafft ein eigenes Modul, das es benutzt. Auch BSDDB scheint eine geschrieben zu haben, aber ich habe es nicht vollständig erforscht. Sind die Module austauschbar?

SQLAlchemy Dies scheint das beliebteste zu sein? Aber ich habe sehr begrenzte Exposition gegenüber der Pythonwelt.

SQLObject habe ich noch nicht gesehen

Also, was sind Völker Ansichten und Vorschläge auf Datenbank Abstraktion Schichten für Python?

  • Schnelles Dumping einer Datenbank im Speicher in Datei
  • Sqlite3.OperationalError: Datenbankdatei kann nicht geöffnet werden
  • Keine autoincrement für Integer Primärschlüssel in sqlite3
  • Pysqlite2: ProgrammingError - Du darfst keine 8-Bit-Bytestringe verwenden
  • Sqlite3.OperationalError: nahe "WHERE": Syntaxfehler
  • Mit SQLite's FTS3 / 4 mit Python 3
  • Wie man aus sqlite3 cursor.fetchall () in python entfernen kann
  • Commit Verhalten und Atomität in Python sqlite3 Modul
  • 8 Solutions collect form web for “Was sind die lebensfähigen Datenbank-Abstraktionsschichten für Python”

    Schau ganz genau auf SQLAlchemy.

    Sie können mit SQLite testen und entwickeln.

    Sie können mit MySQL in Produktion gehen – im Wesentlichen keine Änderungen an Ihren Anwendungen.

    Die DB-API, während weithin eingehalten, hat genug Flexibilität, dass (1) Sie nicht von SQL-Variation in der zugrunde liegenden RDBMS isoliert und (2) gibt es noch DB-Treiber-spezifische Features, die schwer zu verbergen sind.

    Eine weitere gute ORM-Schicht ist das ORM, das Teil von Django ist . Sie können (mit ein wenig Aufwand) nur das Django ORM verwenden, ohne den Rest des Django Web Frameworks zu benutzen.

    Verwenden Sie eine ORM-Ebene (SQLAlchemy oder SQLObject) in Vorbereitung auf DB-API.

    Warum? Ihr Modell sollte ein solides, klares, durchdachtes OO-Modell sein. Die relationale Zuordnung sollte nach dem Objektmodell an zweiter Stelle stehen. SQLAlchemie macht dies zu einem vernünftigen Ansatz.

    Ein "DB Abstraction Layer" wird im normalen Verlauf der Ereignisse passieren. In der Tat, wegen der DB-API (wie von SQLAlchemy verwendet) gabst du zwei Abstraktionsschichten: ORM und DB-API.

    Der Zugriff auf eine korrekte Datenbank von Python erfolgt fast immer mit einem DB-API 2.0-kompatiblen Adaptermodul. Während alle DB-API-Module identische APIs haben (oder sehr ähnlich, nicht alle Backends unterstützen alle Features), wenn du das SQL selbst schreibst, wirst du wahrscheinlich SQL in einem produktspezifischen Dialekt schreiben, also sind sie nicht so austauschbar Praxis, wie sie in der Theorie sind.

    Ehrlich gesagt, SQLite klingt perfekt für Ihren Anwendungsfall. Ich würde mich nicht mit "eingebettetem MySQL" auseinandersetzen; Das klingt wie das Schlimmste beider Welten. Ob Sie ein ORM mögen, wie SQLAlchemy ist völlig bis zu Ihnen; Es gibt gute Argumente. Persönlich mag ich ORMs nicht, aber dann habe ich einen Mathe-Grad, also die Tatsache, dass ich SQL als Sprache schätze, ist wohl nicht zu überraschend 🙂

    CouchDB ist keine relationale Datenbank, also hat es keine DB-API-Schnittstelle. Es ist eine Dokumentendatenbank, die bedeutet, dass es nicht so nützlich für Gramps wäre, weil es einige Verzerrungen erfordern würde, um Verbindungen zwischen verwandten Personen zu identifizieren. Darüber hinaus kann es nur im Client / Server-Modus laufen.

    Jedes ORM wie SQLAlchemy, SQLObject oder das Django ORM sind auf der DB-API implementiert und ich empfehle, diese über die direkte DB-API zu verwenden, da es Gramps die Flexibilität geben kann, sqlite im Embedded-Modus für lokale Desktop-Benutzer auszuführen und dann Auch teilen, irgendwann auf der Straße, eine Postgresql / MySQL-Datenbank-Verbindung mit einer Web-basierten Version von Gramps.

    Ich mag Sturm :

    Sturm ist ein Objekt-relationaler Mapper (ORM) für Python, der bei Canonical entwickelt wurde. Das Projekt ist seit mehr als einem Jahr in der Entwicklung in kanonischen Projekten wie Launchpad, und wurde vor kurzem als Open-Source-Produkt veröffentlicht.

    Meiner Meinung nach ist Storm viel leichter zu lernen als SQLAlchemy. Ist ähnlich wie bei Djangos ORM.

    Web2py hat eine Datenbank-Abstraktionsschicht, die eigenständig verwendet werden kann. Wir wechselten zwischen sqlite3, Microsoft SQL Server, Oracle und MySQL mit Nullcodeänderungen. Beeindruckt

    Wenn Ihr Projekt jemals eine echte Komplexität haben wird, bleiben Sie weg von ORMs.

    http://blogs.tedneward.com/2006/06/26/The+Vietnam+Of+Computer+Science.aspx

    Als ich anfing, eine ältere app zu konvertieren, um ein ORM zu verwenden, sah ich in SQLObject und SQLAlchemy. Zuerst ging ich mit SQLObject, weil es vertraut aussah (Vergangenheit Django Erfahrung) und SQLAlchemy schien kompliziert. Nach etwa 2 Stunden fing ich an, mit SQLObject Wände zu treffen. Ich sah dann SQLAlchemy wieder an und wurde sofort belohnt. Nicht nur hat es verstanden und karte jeden sonderbaren Tisch in der Datenbank, es könnte sogar die noch schöneren Lookups machen, die ich später machen musste!

    Ich denke, dass CouchDB die beste Wahl für ein solches Projekt wie Gramps wäre.

    Nützliche CouchDB Features für Gramps:

    Python ist die beste Programmiersprache der Welt.