Robust CouchDB Python interface using python-requests.
Documentation: https://couchdb-requests.readthedocs.org/en/latest/
- Goals:
- Only one way to do something
- Fast and stable (connection pooled)
- Explicit is better than implicit. Buffer sizes, connection pool size.
- Specify query parameters, no **params in query functions
- Not configurable with multiple backends but one single well tested backend
- Google App Engine support
- Cloudant support
- Non-goals:
- Full api coverage (In my view async support requires mainloop integration).
Plan to implement schema support in the future but right now it is not supported.
python-requests >= 2.5.1
from couchdbreq import Server server = Server("http://127.0.0.1:5984", timeout=30) # 30 second timeout on all requests # List all database names server.get_db_names() # Create a db db = server.create_db("my_new_db") # Save a doc with an explicit id doc1 = { "_id": "doc1", "value": 3.1415 } db.save_doc(doc1) # doc1 now has a _rev print doc1["_rev"] # Save a doc with no id doc2 = { "value": 1.14 } db.save_doc(doc2) # doc2 has an _id and a _rev print doc2["_id"], doc2["_rev"] # List all docs in the db view = db.all_docs() for row in view: print row["id"], row["key"], row["value"] # Create a view based on the old view view_limited = view.filter(limit=1) print len(view_limited) # == 1 # Create a design doc design_doc = { '_id': '_design/test', 'language': 'javascript', 'views': { 'all': { "map": """function(doc) { emit(doc._id, doc.value); }""" } } } db.save_doc(design_doc) # Query the view view = db.view('test/all', descending=True) for row in view: print row['value'] view2 = view.filter(startkey="d") for row in view2: print row['value'] server.delete_db("my_new_db")
You can use a cloudant couch like so:
from couchdbreq import Server, Session from requests.auth import HTTPBasicAuth session = Session(auth=HTTPBasicAuth('username', 'password')) server = Server("https://username.cloudant.com", session=session)