You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by Apache Wiki <wi...@apache.org> on 2008/11/02 00:53:00 UTC
[Couchdb Wiki] Update of "Getting started with Python" by MartinCzura
Dear Wiki user,
You have subscribed to a wiki page or wiki category on "Couchdb Wiki" for change notification.
The following page has been changed by MartinCzura:
http://wiki.apache.org/couchdb/Getting_started_with_Python
The comment on the change is:
page creation
New page:
Getting started with Python and the CouchDB API.
== Library ==
=== couchdb-python ===
The code for the Python library can be obtained from:
http://code.google.com/p/couchdb-python
>>From a terminal window:
{{{
$ wget http://peak.telecommunity.com/dist/ez_setup.py
$ sudo python ez_setup.py
$ wget http://pypi.python.org/packages/2.5/C/CouchDB/CouchDB-0.4-py2.5.egg
$ sudo easy_install CouchDB-0.4-py2.5.egg
}}}
This first downloads and installs the ''ez_setup.py'' script which runs python ''.egg'' files. The second part downloads the ''.egg'' file for CouchDB and installs it along with its dependencies.
=== pouch ===
http://code.google.com/p/pouch/
== Tutorial on using couchdb-python with Django ==
A tutorial on using Django (a Python framework) with CouchDb can be found at
http://lethain.com/entry/2008/aug/18/an-introduction-to-using-couchdb-with-django/
Alternatively you can view just the source for that example at
http://github.com/lethain/comfy-django-example/tree/master
== Example Wrapper Class ==
Demonstration of basic API-interaction using Python.
{{{#!python
#! /usr/bin/python2.4
import httplib, simplejson # http://cheeseshop.python.org/pypi/simplejson
# Here only used for prettyprinting
def prettyPrint(s):
"""Prettyprints the json response of an HTTPResponse object"""
# HTTPResponse instance -> Python object -> str
print simplejson.dumps(simplejson.loads(s.read()), sort_keys=True, indent=4)
class Couch:
"""Basic wrapper class for operations on a couchDB"""
def __init__(self, host, port=5984, options=None):
self.host = host
self.port = port
def connect(self):
return httplib.HTTPConnection(self.host, self.port) # No close()
# Database operations
def createDb(self, dbName):
"""Creates a new database on the server"""
r = self.put(''.join(['/',dbName,'/']), "")
prettyPrint(r)
def deleteDb(self, dbName):
"""Deletes the database on the server"""
r = self.delete(''.join(['/',dbName,'/']))
prettyPrint(r)
def listDb(self):
"""List the databases on the server"""
prettyPrint(self.get('/_all_dbs'))
def infoDb(self, dbName):
"""Returns info about the couchDB"""
r = self.get(''.join(['/', dbName, '/']))
prettyPrint(r)
# Document operations
def listDoc(self, dbName):
"""List all documents in a given database"""
r = self.get(''.join(['/', dbName, '/', '_all_docs']))
prettyPrint(r)
def openDoc(self, dbName, docId):
"""Open a document in a given database"""
r = self.get(''.join(['/', dbName, '/', docId,]))
prettyPrint(r)
def saveDoc(self, dbName, body, docId=None):
"""Save/create a document to/in a given database"""
if docId:
r = self.put(''.join(['/', dbName, '/', docId]), body)
else:
r = self.post(''.join(['/', dbName, '/']), body)
prettyPrint(r)
def deleteDoc(self, dbName, docId):
# XXX Crashed if resource is non-existent; not so for DELETE on db. Bug?
# XXX Does not work any more, on has to specify an revid
# Either do html head to get the recten revid or provide it as parameter
r = self.delete(''.join(['/', dbName, '/', docId]))
prettyPrint(r)
# Basic http methods
def get(self, uri):
c = self.connect()
headers = {"Accept": "application/json"}
c.request("GET", uri, None, headers)
return c.getresponse()
def post(self, uri, body):
c = self.connect()
headers = {"Content-type": "application/json"}
c.request('POST', uri, body, headers)
return c.getresponse()
def put(self, uri, body):
c = self.connect()
if len(body) > 0:
headers = {"Content-type": "application/json"}
c.request("PUT", uri, body, headers)
else:
c.request("PUT", uri, body)
return c.getresponse()
def delete(self, uri):
c = self.connect()
c.request("DELETE", uri)
return c.getresponse()
}}}
== Usage Example ==
{{{#!python
def test():
foo = Couch('localhost', '5984')
print "\nCreate database 'mydb':"
foo.createDb('mydb')
print "\nList databases on server:"
foo.listDb()
print "\nCreate a document 'mydoc' in database 'mydb':"
doc = """
{
"value":
{
"Subject":"I like Planktion",
"Author":"Rusty",
"PostedDate":"2006-08-15T17:30:12-04:00",
"Tags":["plankton", "baseball", "decisions"],
"Body":"I decided today that I don't like baseball. I like plankton."
}
}
"""
foo.saveDoc('mydb', doc, 'mydoc')
print "\nCreate a document, using an assigned docId:"
foo.saveDoc('mydb', doc)
print "\nList all documents in database 'mydb'"
foo.listDoc('mydb')
print "\nRetrieve document 'mydoc' in database 'mydb':"
foo.openDoc('mydb', 'mydoc')
print "\nDelete document 'mydoc' in database 'mydb':"
foo.deleteDoc('mydb', 'mydoc')
print "\nList all documents in database 'mydb'"
foo.listDoc('mydb')
print "\nList info about database 'mydb':"
foo.infoDb('mydb')
print "\nDelete database 'mydb':"
foo.deleteDb('mydb')
print "\nList databases on server:"
foo.listDb()
if __name__ == "__main__":
test()
}}}
== Sample Output ==
{{{#!java
Create database 'mydb':
{
"ok": true
}
List databases on server:
[
"mydb"
]
Create a document 'mydoc' in database 'mydb':
{
"_id": "mydoc",
"_rev": 362213977,
"ok": true
}
Create a document, using an assigned docId:
{
"_id": "CF29360495B2AAB44C7E43E5752A5123",
"_rev": 627930386,
"ok": true
}
List all documents in database 'mydb'
{
"rows": [
{
"_id": "CF29360495B2AAB44C7E43E5752A5123",
"_rev": 627930386
},
{
"_id": "mydoc",
"_rev": 362213977
}
],
"view": "_all_docs"
}
Retrieve document 'mydoc' in database 'mydb':
{
"_id": "mydoc",
"_rev": 362213977,
"value": {
"Author": "Rusty",
"Body": "I decided today that I don't like baseball. I like plankton.",
"PostedDate": "2006-08-15T17:30:12-04:00",
"Subject": "I like Planktion",
"Tags": [
"plankton",
"baseball",
"decisions"
]
}
}
Delete document 'mydoc' in database 'mydb':
{
"_rev": 3811288472,
"ok": true
}
List all documents in database 'mydb'
{
"rows": [
{
"_id": "CF29360495B2AAB44C7E43E5752A5123",
"_rev": 627930386
}
],
"view": "_all_docs"
}
List info about database 'mydb':
{
"db_name": "mydb",
"doc_count": 1,
"update_seq": 3
}
Delete database 'mydb':
{
"ok": true
}
List databases on server:
[]
}}}