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.errorals erstes Element aufgeführt ist — letztere wird verwendet, wenndbm.errorausgelöst wird.
- dbm.whichdb(filename)¶
Diese Funktion versucht zu erraten, welches der mehreren verfügbaren einfachen Datenbankmodule —
dbm.sqlite3,dbm.gnu,dbm.ndbmoderdbm.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 existiertdie leere Zeichenkette (
''), wenn das Format der Datei nicht erraten werden kanneine 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 Methodesetdefault()erfordert zwei Argumente. Es unterstützt auch einen „schließenden“ Kontextmanager über das Schlüsselwortwith.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.KeyErrorwird für allgemeine Mapping-Fehler wie die Angabe eines falschen Schlüssels ausgelöst.
- 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_flagsfü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 Methodenitems(),values(),pop(),popitem()undupdate()werden nicht unterstützt, die Methodekeys()gibt eine Liste zurück und die Methodesetdefault()erfordert zwei Argumente. Sie unterstützt auch einen „schließenden“ Kontextmanager über das Schlüsselwortwith.Geändert in Version 3.2: Die Methoden
get()undsetdefault()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
dbaus, ohne eine Liste im Speicher erstellen zu müssen, die alle enthältk = 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.KeyErrorwird 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
.diroder.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 Methodenitems(),values(),pop(),popitem()undupdate()werden nicht unterstützt, die Methodekeys()gibt eine Liste zurück und die Methodesetdefault()erfordert zwei Argumente. Sie unterstützt auch einen „schließenden“ Kontextmanager über das Schlüsselwortwith.Geändert in Version 3.2: Die Methoden
get()undsetdefault()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.KeyErrorwird 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.datfilename.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()unditems()geben Listen zurück und die Methodesetdefault()erfordert zwei Argumente. Sie unterstützt auch einen „schließenden“ Kontextmanager über das Schlüsselwortwith.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.