Documentation: #TODO
Ognom is object-to-document mapper for mongodb. Currently ognom uses pymongo as default backend, but you can easily implement your own backend based on another driver (for example asyncio-mongo) if needed, as serialization and storage logic in ognom are separated.
Supports python2.7+, python3.3+, PyPy.
Documentation: #TODO
pip install ognom
tox
- Vanilla python, no dependencies;
- From version 1.0 exposes full pymongo API(!);
- Easy to write your own backend with your own API.
from ognom.base import ConnectionManager, Document, Collection
from ognom.fields import StringField, IntField
ConnectionManager.connect({
'main': { # ognom use aliases for databases to make it possible to use multiple db's per project
'name': 'birzha_main',
'args': ['127.0.0.1:27017'],
'kwargs': {'socketTimeoutMS': 60000}},})
class Foo(Document):
objects = Collection(
db_name='main'
collection_name='my_foos' # collection name (by default 'foos')
indexes=[{
'index': [('bar', 1), ('baz', -1)],
'background': True}])
bar = StringField(required=True, default='baaar')
baz = IntField(choices=[10, 20, 30, 40, 50])
foo1 = Foo.objects.create({'bar': 'lalala'})
assert Foo.objects.get({'bar': 'lalala'}).id == foo1.id
foo2 = Foo(bar='lololo', baz=10)
assert foo2.id is None
foo2.save()
assert foo2.id is not None
foo2.remove()
foos = Foo.objects.find({'bar': 'lalala'}) # not list but CursorWrapper!
assert len(list(foos)) == 1
- Lev Orekhov @lorehov
- Michael Elovskikh @wronglink
- Sardnej @sardnej