dbm — Schnittstellen zu Unix-„Datenbanken“

Quellcode: Lib/dbm/__init__.py


dbm ist eine generische Schnittstelle zu Varianten der DBM-Datenbank

Wenn keines dieser Module installiert ist, wird die langsame, aber einfache Implementierung im Modul dbm.dumb verwendet. Es gibt eine Drittanbieter-Schnittstelle zur Oracle Berkeley DB.

exception dbm.error

Ein Tupel, das die Ausnahmen enthält, die von jedem der unterstützten Module ausgelöst werden können, wobei eine eindeutige Ausnahme mit dem Namen dbm.error als erstes Element aufgeführt ist — letztere wird verwendet, wenn dbm.error ausgelöst wird.

dbm.whichdb(filename)

Diese Funktion versucht zu erraten, welches der mehreren verfügbaren einfachen Datenbankmodule — dbm.sqlite3, dbm.gnu, dbm.ndbm oder dbm.dumb — verwendet werden sollte, um eine gegebene Datei zu öffnen.

Gibt einen der folgenden Werte zurück

  • None, wenn die Datei nicht geöffnet werden kann, weil sie unlesbar ist oder nicht existiert

  • die leere Zeichenkette (''), wenn das Format der Datei nicht erraten werden kann

  • eine Zeichenkette, die den Namen des benötigten Moduls enthält, wie z. B. 'dbm.ndbm' oder 'dbm.gnu'

Geändert in Version 3.11: *filename* akzeptiert ein pfadähnliches Objekt.

dbm.open(file, flag='r', mode=0o666)

Öffnet eine Datenbank und gibt das entsprechende Datenbankobjekt zurück.

Parameter:
  • file (pfadähnliches Objekt) –

    Die zu öffnende Datenbankdatei.

    Wenn die Datenbankdatei bereits existiert, wird die Funktion whichdb() verwendet, um ihren Typ zu bestimmen und das entsprechende Modul zu verwenden; wenn sie nicht existiert, wird das erste der oben genannten Submodule, das importiert werden kann, verwendet.

  • flag (str) –

    • 'r' (Standard): Bestehende Datenbank zum Nur-Lesen öffnen.

    • 'w': Bestehende Datenbank zum Lesen und Schreiben öffnen.

    • 'c': Datenbank zum Lesen und Schreiben öffnen, sie erstellen, wenn sie nicht existiert.

    • 'n': Immer eine neue, leere Datenbank erstellen, zum Lesen und Schreiben öffnen.

  • mode (int) – Der Unix-Dateizugriffsmodus der Datei (Standard: Oktal 0o666), wird nur verwendet, wenn die Datenbank erstellt werden muss.

Geändert in Version 3.11: *file* akzeptiert ein pfadähnliches Objekt.

Das von open() zurückgegebene Objekt unterstützt die grundlegende Funktionalität von veränderbaren Mappings; Schlüssel und ihre entsprechenden Werte können gespeichert, abgerufen und gelöscht werden, und Iteration, der in-Operator und die Methoden keys(), get(), setdefault() und clear() sind verfügbar. Die Methode keys() gibt eine Liste anstelle eines View-Objekts zurück. Die Methode setdefault() erfordert zwei Argumente.

Schlüssel und Werte werden immer als bytes gespeichert. Das bedeutet, dass bei der Verwendung von Zeichenketten diese implizit in die Standardkodierung konvertiert werden, bevor sie gespeichert werden.

Diese Objekte unterstützen auch die Verwendung in einer with-Anweisung, die sie automatisch schließt, wenn die Arbeit damit abgeschlossen ist.

Geändert in Version 3.2: Die Methoden get() und setdefault() sind nun für alle dbm-Backends verfügbar.

Geändert in Version 3.4: Nativer Support für das Context-Management-Protokoll für die von open() zurückgegebenen Objekte hinzugefügt.

Geändert in Version 3.8: Das Löschen eines Schlüssels aus einer schreibgeschützten Datenbank löst eine modulspezifische Ausnahme aus anstelle von KeyError.

Geändert in Version 3.13: Die Methoden clear() sind nun für alle dbm-Backends verfügbar.

Das folgende Beispiel zeichnet einige Hostnamen und einen entsprechenden Titel auf und gibt dann den Inhalt der Datenbank aus

import dbm

# Open database, creating it if necessary.
with dbm.open('cache', 'c') as db:

    # Record some values
    db[b'hello'] = b'there'
    db['www.python.org'] = 'Python Website'
    db['www.cnn.com'] = 'Cable News Network'

    # Note that the keys are considered bytes now.
    assert db[b'www.python.org'] == b'Python Website'
    # Notice how the value is now in bytes.
    assert db['www.cnn.com'] == b'Cable News Network'

    # Often-used methods of the dict interface work too.
    print(db.get('python.org', b'not present'))

    # Storing a non-string key or value will raise an exception (most
    # likely a TypeError).
    db['www.yahoo.com'] = 4

# db is automatically closed when leaving the with statement.

Siehe auch

Modul shelve

Persistenzmodul, das Nicht-Zeichenketten-Daten speichert.

Die einzelnen Submodule werden in den folgenden Abschnitten beschrieben.

dbm.sqlite3 — SQLite-Backend für dbm

Hinzugefügt in Version 3.13.

Quellcode: Lib/dbm/sqlite3.py


Dieses Modul verwendet das Modul sqlite3 der Standardbibliothek, um ein SQLite-Backend für das Modul dbm bereitzustellen. Die von dbm.sqlite3 erstellten Dateien können somit von sqlite3 oder jedem anderen SQLite-Browser, einschließlich der SQLite-CLI, geöffnet werden.

Verfügbarkeit: nicht WASI.

Dieses Modul funktioniert nicht oder ist nicht auf WebAssembly verfügbar. Weitere Informationen finden Sie unter WebAssembly-Plattformen.

dbm.sqlite3.open(filename, flag='r', mode=0o666)

Öffnet eine SQLite-Datenbank.

Parameter:
  • filename (pfadähnliches Objekt) – Der Pfad zur zu öffnenden Datenbank.

  • flag (str) –

    • 'r' (Standard): Bestehende Datenbank zum Nur-Lesen öffnen.

    • 'w': Bestehende Datenbank zum Lesen und Schreiben öffnen.

    • 'c': Datenbank zum Lesen und Schreiben öffnen, sie erstellen, wenn sie nicht existiert.

    • 'n': Immer eine neue, leere Datenbank erstellen, zum Lesen und Schreiben öffnen.

  • mode – Der Unix-Dateizugriffsmodus der Datei (Standard: Oktal 0o666), wird nur verwendet, wenn die Datenbank erstellt werden muss.

Das zurückgegebene Datenbankobjekt verhält sich ähnlich wie ein veränderbares Mapping, aber die Methode keys() gibt eine Liste zurück und die Methode setdefault() erfordert zwei Argumente. Es unterstützt auch einen „schließenden“ Kontextmanager über das Schlüsselwort with.

Die folgende Methode wird ebenfalls bereitgestellt

sqlite3.close()

Schließt die SQLite-Datenbank.

dbm.gnu — GNU-Datenbankmanager

Quellcode: Lib/dbm/gnu.py


Das Modul dbm.gnu bietet eine Schnittstelle zur GDBM-Bibliothek, ähnlich dem Modul dbm.ndbm, jedoch mit zusätzlichen Funktionen wie Crash-Toleranz.

Hinweis

Die von dbm.gnu und dbm.ndbm erstellten Dateiformate sind inkompatibel und können nicht austauschbar verwendet werden.

Verfügbarkeit: nicht Android, nicht iOS, nicht WASI.

Dieses Modul wird auf mobilen Plattformen oder WebAssembly-Plattformen nicht unterstützt.

exception dbm.gnu.error

Ausgelöst bei dbm.gnu-spezifischen Fehlern, wie z. B. E/A-Fehlern. KeyError wird für allgemeine Mapping-Fehler wie die Angabe eines falschen Schlüssels ausgelöst.

dbm.gnu.open_flags

Eine Zeichenkette von Zeichen, die der *flag*-Parameter von open() unterstützt.

dbm.gnu.open(filename, flag='r', mode=0o666, /)

Öffnet eine GDBM-Datenbank und gibt ein gdbm-Objekt zurück.

Parameter:
  • filename (pfadähnliches Objekt) – Die zu öffnende Datenbankdatei.

  • flag (str) –

    • 'r' (Standard): Bestehende Datenbank zum Nur-Lesen öffnen.

    • 'w': Bestehende Datenbank zum Lesen und Schreiben öffnen.

    • 'c': Datenbank zum Lesen und Schreiben öffnen, sie erstellen, wenn sie nicht existiert.

    • 'n': Immer eine neue, leere Datenbank erstellen, zum Lesen und Schreiben öffnen.

    Die folgenden zusätzlichen Zeichen können angehängt werden, um zu steuern, wie die Datenbank geöffnet wird

    • 'f': Öffnet die Datenbank im schnellen Modus. Schreibvorgänge in die Datenbank werden nicht synchronisiert.

    • 's': Synchronisierter Modus. Änderungen an der Datenbank werden sofort in die Datei geschrieben.

    • 'u': Datenbank nicht sperren.

    Nicht alle Flags sind für alle GDBM-Versionen gültig. Siehe das Mitglied open_flags für eine Liste der unterstützten Flag-Zeichen.

  • mode (int) – Der Unix-Dateizugriffsmodus der Datei (Standard: Oktal 0o666), wird nur verwendet, wenn die Datenbank erstellt werden muss.

Löst aus:

error – Wenn ein ungültiges *flag*-Argument übergeben wird.

Geändert in Version 3.11: *filename* akzeptiert ein pfadähnliches Objekt.

gdbm-Objekte verhalten sich ähnlich wie veränderbare Mappings, aber die Methoden items(), values(), pop(), popitem() und update() werden nicht unterstützt, die Methode keys() gibt eine Liste zurück und die Methode setdefault() erfordert zwei Argumente. Sie unterstützt auch einen „schließenden“ Kontextmanager über das Schlüsselwort with.

Geändert in Version 3.2: Die Methoden get() und setdefault() wurden hinzugefügt.

Geändert in Version 3.13: Die Methode clear() wurde hinzugefügt.

Die folgenden Methoden werden ebenfalls bereitgestellt

gdbm.close()

Schließt die GDBM-Datenbank.

gdbm.firstkey()

Es ist möglich, jeden Schlüssel in der Datenbank mithilfe dieser Methode und der Methode nextkey() zu durchlaufen. Die Traversierung ist nach den internen Hash-Werten von GDBM geordnet und nicht nach den Schlüsselwerten sortiert. Diese Methode gibt den Startschlüssel zurück.

gdbm.nextkey(key)

Gibt den Schlüssel zurück, der auf *key* in der Traversierung folgt. Der folgende Code gibt jeden Schlüssel in der Datenbank db aus, ohne eine Liste im Speicher erstellen zu müssen, die alle enthält

k = db.firstkey()
while k is not None:
    print(k)
    k = db.nextkey(k)
gdbm.reorganize()

Wenn Sie viele Löschungen vorgenommen haben und den von der GDBM-Datei belegten Speicherplatz reduzieren möchten, reorganisiert diese Routine die Datenbank. gdbm-Objekte verkürzen die Länge einer Datenbankdatei nicht, außer durch diese Reorganisation; andernfalls wird gelöschter Speicherplatz beibehalten und wiederverwendet, wenn neue Schlüssel/Wert-Paare hinzugefügt werden.

gdbm.sync()

Wenn die Datenbank im schnellen Modus geöffnet wurde, erzwingt diese Methode, dass alle ungeschriebenen Daten auf die Festplatte geschrieben werden.

dbm.ndbm — New Database Manager

Quellcode: Lib/dbm/ndbm.py


Das Modul dbm.ndbm bietet eine Schnittstelle zur NDBM-Bibliothek. Dieses Modul kann mit der „klassischen“ NDBM-Schnittstelle oder der GDBM-Kompatibilitätsschnittstelle verwendet werden.

Hinweis

Die von dbm.gnu und dbm.ndbm erstellten Dateiformate sind inkompatibel und können nicht austauschbar verwendet werden.

Warnung

Die NDBM-Bibliothek, die als Teil von macOS ausgeliefert wird, hat eine undokumentierte Beschränkung für die Größe von Werten, was bei der Speicherung von Werten, die größer als diese Grenze sind, zu beschädigten Datenbankdateien führen kann. Das Lesen solcher beschädigten Dateien kann zu einem harten Absturz (Segmentierungsfehler) führen.

Verfügbarkeit: nicht Android, nicht iOS, nicht WASI.

Dieses Modul wird auf mobilen Plattformen oder WebAssembly-Plattformen nicht unterstützt.

exception dbm.ndbm.error

Ausgelöst bei dbm.ndbm-spezifischen Fehlern, wie z. B. E/A-Fehlern. KeyError wird für allgemeine Mapping-Fehler wie die Angabe eines falschen Schlüssels ausgelöst.

dbm.ndbm.library

Name der verwendeten NDBM-Implementierungsbibliothek.

dbm.ndbm.open(filename, flag='r', mode=0o666, /)

Öffnet eine NDBM-Datenbank und gibt ein ndbm-Objekt zurück.

Parameter:
  • filename (pfadähnliches Objekt) – Der Basisname der Datenbankdatei (ohne die Erweiterungen .dir oder .pag).

  • flag (str) –

    • 'r' (Standard): Bestehende Datenbank zum Nur-Lesen öffnen.

    • 'w': Bestehende Datenbank zum Lesen und Schreiben öffnen.

    • 'c': Datenbank zum Lesen und Schreiben öffnen, sie erstellen, wenn sie nicht existiert.

    • 'n': Immer eine neue, leere Datenbank erstellen, zum Lesen und Schreiben öffnen.

  • mode (int) – Der Unix-Dateizugriffsmodus der Datei (Standard: Oktal 0o666), wird nur verwendet, wenn die Datenbank erstellt werden muss.

Geändert in Version 3.11: Akzeptiert ein pfadähnliches Objekt für den Dateinamen.

ndbm-Objekte verhalten sich ähnlich wie veränderbare Mappings, aber die Methoden items(), values(), pop(), popitem() und update() werden nicht unterstützt, die Methode keys() gibt eine Liste zurück und die Methode setdefault() erfordert zwei Argumente. Sie unterstützt auch einen „schließenden“ Kontextmanager über das Schlüsselwort with.

Geändert in Version 3.2: Die Methoden get() und setdefault() wurden hinzugefügt.

Geändert in Version 3.13: Die Methode clear() wurde hinzugefügt.

Die folgende Methode wird ebenfalls bereitgestellt

ndbm.close()

Schließt die NDBM-Datenbank.

dbm.dumb — Portierbare DBM-Implementierung

Quellcode: Lib/dbm/dumb.py

Hinweis

Das Modul dbm.dumb ist als letzter Ausweichfall für das Modul dbm gedacht, wenn kein robusteres Modul verfügbar ist. Das Modul dbm.dumb ist nicht auf Geschwindigkeit ausgelegt und wird bei weitem nicht so häufig verwendet wie die anderen Datenbankmodule.


Das Modul dbm.dumb bietet eine persistente dict-ähnliche Schnittstelle, die vollständig in Python geschrieben ist. Im Gegensatz zu anderen dbm-Backends, wie z. B. dbm.gnu, ist keine externe Bibliothek erforderlich.

Das Modul dbm.dumb definiert Folgendes

exception dbm.dumb.error

Ausgelöst bei dbm.dumb-spezifischen Fehlern, wie z. B. E/A-Fehlern. KeyError wird für allgemeine Mapping-Fehler wie die Angabe eines falschen Schlüssels ausgelöst.

dbm.dumb.open(filename, flag='c', mode=0o666)

Öffnet eine dbm.dumb-Datenbank.

Parameter:
  • filename

    Der Basisname der Datenbankdatei (ohne Erweiterungen). Eine neue Datenbank erstellt die folgenden Dateien

    • filename.dat

    • filename.dir

  • flag (str) –

    • 'r': Bestehende Datenbank zum Nur-Lesen öffnen.

    • 'w': Bestehende Datenbank zum Lesen und Schreiben öffnen.

    • 'c' (Standard): Datenbank zum Lesen und Schreiben öffnen, sie erstellen, wenn sie nicht existiert.

    • 'n': Immer eine neue, leere Datenbank erstellen, zum Lesen und Schreiben öffnen.

  • mode (int) – Der Unix-Dateizugriffsmodus der Datei (Standard: Oktal 0o666), wird nur verwendet, wenn die Datenbank erstellt werden muss.

Warnung

Es ist möglich, den Python-Interpreter beim Laden einer Datenbank mit einem ausreichend großen/komplexen Eintrag aufgrund von Stapelbeschränkungen im AST-Compiler von Python abstürzen zu lassen.

Geändert in Version 3.5: open() erstellt immer eine neue Datenbank, wenn *flag* 'n' ist.

Geändert in Version 3.8: Eine Datenbank wird schreibgeschützt geöffnet, wenn *flag* 'r' ist. Eine Datenbank wird nicht erstellt, wenn sie nicht existiert, wenn *flag* 'r' oder 'w' ist.

Geändert in Version 3.11: *filename* akzeptiert ein pfadähnliches Objekt.

Das zurückgegebene Datenbankobjekt verhält sich ähnlich wie ein veränderbares Mapping, aber die Methoden keys() und items() geben Listen zurück und die Methode setdefault() erfordert zwei Argumente. Sie unterstützt auch einen „schließenden“ Kontextmanager über das Schlüsselwort with.

Die folgenden Methoden werden ebenfalls bereitgestellt

dumbdbm.close()

Schließt die Datenbank.

dumbdbm.sync()

Synchronisiert die auf der Festplatte befindlichen Verzeichnis- und Datendateien. Diese Methode wird von der Methode shelve.Shelf.sync() aufgerufen.