RethinkDB python library. Provides connection manager and ORM framework (object-relational mapping, sometimes called ODM or OM for nosql databases).
Three main purposes:
- round-robin connections among database servers
- make sure connections close at proper time
- retry retry-able queries on failure
Not currently a connection pool, because it doesn’t keep any connections open. Should be possible to implement connection pooling without changing the API.
import doublethink rr = doublethink.Rethinker(['db0.foo.com', 'db0.foo.com:38015', 'db1.foo.com'], 'my_db') rr.table('mytable').insert({'foo':'bar','baz':2}).run() for result in rr.table('mytable'): print("result={}".format(result))
Simple yet powerful ORM system. Does not enforce a schema.
import doublethink rr = doublethink.Rethinker(['db0.foo.com', 'db0.foo.com:38015', 'db1.foo.com'], 'my_db') class MyTable(doublethink.Document): pass MyTable.table_create(rr) doc1 = MyTable(rr, {'animal': 'elephant', 'size': 'large'}) doc1.save() doc1_copy = MyTable.load(rr, doc1.id) doc1_copy.food = 'bread' doc1_copy.save() doc1.first_name = 'Frankworth' doc1.save() doc1.refresh()
Now also has a ServiceRegistry class, a lightweight solution for service discovery for distributed services. Maintains service info and status in a rethinkdb table called “services”.