Python datenbank / sql programmierung – wo zu starten

Was ist der beste Weg, um eine eingebettete Datenbank zu verwenden, sagen sqlite in Python:

  1. Sollte ein kleiner Fußabdruck sein. Ich brauche nur wenige Tausend Platten pro Tabelle. Und nur eine Handvoll Tabellen pro Datenbank.
  2. Wenn es eine von Python Standard-Installation zur Verfügung gestellt, dann großartig. Muss Open-Source sein, verfügbar unter Windows und Linus.
  3. Besser, wenn SQL nicht direkt geschrieben wird, aber kein ORM ist völlig nötig. Etwas, das mich von der eigentlichen Datenbank abschirmen wird, aber nicht so groß von einer Bibliothek. Etwas Ähnliches wie ADO wird großartig sein.
  4. Meistens wird durch Code verwendet werden, aber wenn es eine GUI Front-End, dann ist das toll
  5. Benötigen Sie nur ein paar Seiten, um damit zu beginnen. Ich möchte nicht durch Seiten lesen, was ein Tisch ist und wie eine Select-Anweisung funktioniert. Ich weiß das alles.
  6. Unterstützung für Python 3 ist bevorzugt, aber 2.x ist auch okay.

Die Verwendung ist keine Web-App. Es ist eine kleine Datenbank, die höchstens 5 Tische hält. Die Daten in jeder Tabelle sind nur ein paar String-Spalten. Denken Sie etwas einfaches als ein eingelegtes Wörterbuch

Update : Vielen Dank für die großartigen Vorschläge.
Der Gebrauchsfall, von dem ich spreche, ist ziemlich einfach. Einer, den du wahrscheinlich in ein oder zwei Tagen machen würdest.
Es ist ein 100er-Python-Skript, das Daten über eine relativ große Anzahl von Dateien sammelt (z. B. 10k) und erstellt Metadaten-Dateien über sie und dann eine große Metadatendatei über den gesamten Dateibaum. Ich muss nur vermeiden, die bereits verarbeiteten Dateien neu zu bearbeiten und die Metadaten für die aktualisierten Dateien zu erstellen und die Hauptmetadaten-Datei zu aktualisieren. In einer Weise, cache die verarbeiteten Daten, und nur aktualisieren sie auf Datei Updates. Wenn der Cache beschädigt / nicht verfügbar ist, dann verarbeiten Sie einfach den ganzen Baum. Es dauert 20 Minuten, aber das ist okay.

Beachten Sie, dass die gesamte Verarbeitung im Speicher erfolgt.

Ich möchte keine externen Abhängigkeiten vermeiden, damit das Skript problemlos auf ein beliebiges System mit nur einer Python-Installation gelegt werden kann. Als Windows, ist es manchmal schwer, alle Komponenten installiert zu bekommen. Also, meiner Meinung nach, sogar eine Datenbank könnte ein Overkill sein.

Du würdest wahrscheinlich kein Office Word / Writer ausschreiben, um einen kleinen Beitrag zu schreiben, den es notiert hat. Ähnlich zögere ich nur etwas wie Django für diesen Use-Case.

Wo soll man anfangen?

  • Verwenden von sqlite3 in Google App Engine?
  • Fehlende Tabelle beim Ausführen von Django Unittest mit Sqlite3
  • Python- und Hebräischcodierung / Decodierungsfehler
  • Python: Optimierung von Code mit SQLite3 + Mutagen
  • Wie bekomme ich _sqlite3.so Datei?
  • Wie installiere ich pysqlite?
  • Wie man sqlite in CSV in Python exportiert, ohne als Liste formatiert zu werden?
  • Tweepy stream to sqlite Datenbank - Syntax error [duplicate]
  • 9 Solutions collect form web for “Python datenbank / sql programmierung – wo zu starten”

    Ich empfehle die Verwendung eines guten ORM. Wenn Sie mit Python-Objekten arbeiten können, um Ihre Datenbankzeilen zu verwalten, ist das Leben so viel einfacher.

    Ich bin ein Fan des ORM in Django. Aber das war schon empfehlenswert und du hast gesagt, das ist zu schwergewichtig.

    Das lässt mich mit genau einem ORM zu empfehlen: Herbst . Sehr leicht, funktioniert super mit SQLite. Wenn deine eingebettete Applikation multithreaded ist, dann willst du unbedingt Herbst! Es hat Erweiterungen zur Unterstützung von Multithreaded SQLite. (Vollständige Offenlegung: Ich habe diese Erweiterungen geschrieben und dazu beigetragen.Ich schrieb sie bei der Arbeit für RealNetworks, und meine Chefs erlaubten mir, sie zu spenden, also ein öffentliches Dankeschön an RealNetworks.)

    Der Herbst steht in reinem Python. Für SQLite, verwendet es die Python offiziellen SQLite-Modul, um die tatsächliche SQL-Zeug zu tun. Der Gedächtnisabdruck des Herbstes selbst ist winzig.

    Ich empfehle APSW nicht. In meiner bescheidenen Meinung ist es nicht wirklich sehr, um Ihnen zu helfen; Es gibt nur eine Möglichkeit, SQL-Anweisungen auszuführen, und lässt Sie die SQL-Weg, um Dinge zu beherrschen. Außerdem unterstützt es jedes einzelne Feature von SQLite, auch die, die man selten benutzt, und als Ergebnis hat es tatsächlich einen größeren Speicherplatz als der Herbst, während er nicht so einfach zu bedienen ist.

    Ich habe hier angefangen:

    http://www.devshed.com/c/a/Python/Using-SQLite-in-Python

    Es ist 5 (kurze) Seiten mit nur das Wesentliche hat mich sofort gehen.

    Was Sie suchen, ist SQLAlchemy , die schnell die De-facto-Standard-Python-Datenzugriffsschicht wird. Um Ihre ersten Erfahrungen mit SQLAlchemy noch einfacher zu machen, schau dir das Elixier an , das eine dünne ActiveRecord-Wrapper um SQLAlchemy ist.

    Update : Lese die Frage und sah das Bit über nicht brauchen eine volle ORM. Ich würde immer noch vorschlagen, die SQLAlchemy Route, nur weil es Ihnen eine lächerlich einfache Möglichkeit, mit Datenbanken in Python arbeiten, dass Sie für jede Art von Datenbank wiederverwenden können. Die Zeit, die direkt mit SQLite funktioniert, wird verschwendet, sobald Sie eine Verbindung zu Oracle oder etwas haben müssen.

    Beginne mit Django

    http://www.djangoproject.com/

    ORM ist der Weg hierher zu gehen. Sie werden es nicht bereuen. Das Tutorium hier http://docs.djangoproject.com/de/dev/intro/tutorial01/ ist ziemlich sanft.

    Warum Django / ORM? Django wird dich in etwa einer halben Stunde laufen lassen, deine Datenbankverbindungen verwalten, Datenmanagement-Schnittstellen usw. Django arbeitet SQLLite: Du brauchst keine MySQL / PostGre-Instanz zu verwalten.

    EDIT1: Du brauchst hier nicht den Web-App-Teil von Django zu benutzen. Sie können die db.Model-Klassen verwenden, um Ihre Daten direkt zu manipulieren. Was auch immer standalone app / script Sie kommen mit, können Sie einfach die Django Daten-Modell-Ebene. Und wenn du entscheidest, dass du ein Web-Frontend wünschst, oder atleast möchte deine Daten über die Admin-Konsole bearbeiten – du kannst hier zurückblicken und mir danken (oder alle, die ein ORM verwenden) 🙂

    Dies ist eine Summe von Antworten, in keiner bestimmten Reihenfolge:

    Jeder empfiehlt eine ORM-Schicht. Was macht einen perfekten Sinn, wenn man wirklich eine Datenbank braucht. Nun, das war eine Art im Titel 🙂

    1. SQLAlchemie
    2. Herbst
    3. Django ORM
    4. Verwenden Sie SQLite offizielle Unterstützung Pysqlite
    5. Sturm
    6. Elixier
    7. Verwenden Sie einfach Pythons eigene Essiggurke

    Aber ich fange an zu denken, dass, wenn eine In-Memory-Datenbank genügt, in diesem wird nur in Skripten verwendet werden, nicht eine Web-App oder sogar ein Desktop-Gui, dann Option 7 ist auch perfekt gültig, sofern keine Transaktionsunterstützung benötigt wird Und "Datenbank" Integrität ist kein Problem.

    Django ist perfekt dafür, aber das Poster ist nicht klar, ob er eigentlich eine kompilierte EXE oder eine Web-App machen muss. Django ist nur für Web-Apps.

    Ich bin mir nicht sicher, wo du wirklich "schwer" bist. Django ist in Form von Codezeilen grob kleiner als jedes andere große Web-App-Framework.

    Eine weitere Möglichkeit, die anderen guten Vorschläge hinzuzufügen: Elixier . Es gibt eine vereinfachte deklarative Schicht oben auf SQLAlchemy , also sollte es einfacher sein, einzutauchen, aber es erlaubt Ihnen auch, die volle Macht der SQLAlchemy aufzurufen, wenn und wann du es brauchst.

    Es gibt ein einfach zu bedienendes Python-Modul, das alle genannten Ziele erfüllt:

    http://yserial.sourceforge.net/

    Serialisierung + Persistenz: In ein paar Zeilen Code, komprimieren und annotieren Python-Objekte in SQLite; Dann später sie chronologisch durch Schlüsselwörter ohne SQL abrufen. Das nützlichste "Standard" -Modul für eine Datenbank, um schemalose Daten zu speichern.

    Überraschenderweise gibt es nicht viel Unterschied zwischen In-Memory und persistenten Lösungen für die meisten praktischen Zwecke.

    Wie für "Schild mich aus der eigentlichen Datenbank", mit y_serial, kann man nicht einmal sagen, dass SQLite ist dahinter alles. Wenn du deine Datensätze als Python-Wörterbücher konstruierst, kannst du dich auf das Schreiben von Code (nicht gespeicherte Prozeduren) konzentrieren.

    Wenn du kein ORM verwenden willst, kannst du python-sql versuchen, deine SQL-Abfragen zu erstellen.

    Python ist die beste Programmiersprache der Welt.