staging.inyokaproject.org

couchdb-python

Archivierte Anleitung

Dieser Artikel wurde archiviert. Das bedeutet, dass er nicht mehr auf Richtigkeit überprüft oder anderweitig gepflegt wird. Der Inhalt wurde für keine aktuell unterstützte Ubuntu-Version getestet. Wenn du Gründe für eine Wiederherstellung siehst, melde dich bitte in der Diskussion zum Artikel. Bis dahin bleibt die Seite für weitere Änderungen gesperrt.


Anmerkung: Das Python-Modul wird seit Frühjar 2018 nicht mehr weiter entwickelt.

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

couchdb-python.png couchdb-python ist ein Python-Modul, mit dessen Hilfe auf die dokumentenorientierte Datenbank CouchDB aus Python heraus zugegriffen werden kann. Weiterhin gibt es einen Mapper 🇬🇧, der die JSON-basierten Dokumente aus CouchDB auf Python-Objekt abbildet sowie ein View Server 🇬🇧, der es erlaubt, CouchDB Views für die Datenbank in Python zu schreiben.

Interessant ist couchdb-python aber auch für Nicht-Python-Programmierer, da zwei weitere Hilfsprogramme couchdb-dump und couchdb-load mit an Bord sind. Diese ermöglichen, eine Sicherung des Inhalts einer Datenbank lokal in eine Datei zu erstellen und diese dann auch wieder in eine Datenbank zurück zu spielen. Beides ist mit den Bordmittel von CouchDB so nicht möglich.

Installation

couchdb-python kann direkt aus den Quellen installiert werden[1], das zugehörige Paket heißt:

  • python-couchdb

Befehl zum Installieren der Pakete:

sudo apt-get install python-couchdb 

Oder mit apturl installieren, Link: apt://python-couchdb

Manuell

Die Version aus den Quellen ist nicht unbedingt die aktuellste Version. Wer diese benötigt, der kann das neuste Modul z.B. auch über pip installieren. Der entsprechende Befehl lautet[2]:

pip couchdb #für Python 2
pip3 couchdb #für Python 3 

Bei systemweiter Installation muss der Befehl mit Root-Rechten[3] ausgeführt werden.

Benutzung

Python-Modul

Wer das Modul für eigene Projekte nutzen möchte, der sollte sich mit den beiden Hauptklassen couchdb.client und couchdb.schema beschäftigen. Erstere enthält alle benötigten Klassen und Methoden zum Abfragen der Datenbank sowie zum Anlegen von Datenbanken und Dokumenten, letztere stellt den eingangs erwähnten Mapper bereit.

Eine ausführliche Beschreibung mit vielen Beispielen ist in der offiziellen Dokumentation 🇬🇧 zu finden.

Hilfsprogramme

Wie in der Einleitung bereits erwähnt, bringt couchdb-python zwei Hilfsprogramme mit, mit deren Hilfe sich eine Datenbank komplett, also sowohl Dokumente als auch Views, lokal in eine einzige Datei sichern und auch aus dieser Datei wieder zurück spielen lassen. Dies ist z.B. dann nützlich, wenn man eine Datenbank zwischen zwei CouchDB Servern transferieren will, welche nicht im selben Netzwerk sind, so dass keine Replikation möglich ist.

Technisch gesehen wird beim Dump die Datenbank einfach in eine einzige große Textdatei geschrieben, wobei der Inhalt im Format JSON abgelegt wird. Dabei wird immer nur die aktuellste Revision gesichert wird.

Der Befehl zum Sichern einer Datenbank (hier: MEINE_DB) in eine Datei (hier: mein.dump) lautet[2]:

couchdb-dump http://localhost:5984/MEINE_DB > mein.dump 

Der Befehl zum Zurückspielen in die Datenbank MEINE_NEUE_DB lautet:

couchdb-load http://localhost:5984/MEINE_NEUE_DB < mein.dump 

Da für die Zieldatenbank alle Dokumente neu sind, beginnt hier die Revisionszählung wieder bei eins - unabhängig davon, welche Revisionsnummern die Dokumente in der Ausgangsdatenbank hatten. Wenn die Revisionsnummern also beim Transfer der Dokumente erhalten bleiben soll, ist der Weg via couchdb-dump und couchdb-load also nicht der geeignete.

Problembehebung

couchdb-dump bricht mit einen UnicodeEncodeError ab

couchdb-dump (aus der Version 0.8 des Pakets python-couchdb) bricht den Dump mit einem "UnicodeEncodeError" ab, wenn die ID eines Dokuments Nicht-ASCII-Zeichen (wie z.B. äöüß) enthält. Details inkl. Patches siehe auch Ticket 179 🇬🇧

Ab Ubuntu 16.04 ist der Fehler behoben.

Diese Revision wurde am 29. Dezember 2020 09:05 von Heinrich_Schwietering erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Programmierung, Python, Datensicherung