Asynchronous MongoDB ORM for Tornado
Project description
- Info:
Monguo is a full-featured, asynchronous MongoDB ORM with Motor dirver for Tornado applications.
- Author:
Lime YH.Shi
About
Monguo is an asynchronous MongoDB ORM based on driver Motor. The source is on GitHub and the docs are on ReadTheDocs.
Installation
$ pip install git+https://github.com/mongodb/motor.git
$ pip install monguo
Dependencies
Monguo works in all the environments officially supported by Tornado and Motor. It requires:
Examples
class UserDocument(Document):
name = StringField(required=True, unique=True, max_length=20)
email = EmailField(required=True)
age = IntegerField()
sex = StringField(required=True, default='male',
candidate=['male', 'female'])
meta = {
'collection': 'user'
}
def get_user_list(skip=10, limit=5):
result = yield UserDocument.find().to_list(limit)
raise gen.Return(result)
class CommentDocument(EmbeddedDocument):
commentor = ReferenceField(UserDocument, required=True)
contents = StringField(required=True, max_length=200)
class PostDocument(Document):
author = ReferenceField(UserDocument, required=True)
publish_time = DateTimeField(required=True)
title = StringField(required=True, max_length=100)
contents = StringField(max_length=5000)
comments = ListField(EmbeddedDocumentField(CommentDocument))
meta = {
'collection': 'post'
}
# connect to database
Connection.connect('test')
# insert
bob_id = yield UserDocument.insert({
'name': 'Bob',
'email': 'bob@gmail.com',
'age': 19
})
alice_id = yield UserDocument.insert({
'name': 'Alice',
'email': 'alice@gmail.com',
'sex': 'female',
'age': 18
})
post_id = yield PostDocument.insert({
'author': DBRef(UserDocument.meta['collection'], bob_id),
'publish_time': datetime.now(),
'title': 'title',
})
# update
comment = {
'commentor': DBRef(UserDocument.meta['collection'], alice_id),
'contents': 'I am comments.'
}
yield PostDocument.update({'_id': post_id},
{'$push': {'comments': comment}})
# query
user = yield UserDocument.find_one({'name': 'Bob'})
posts = yield PostDocument.find().to_list(5)
# higher API
user_list = yield UserDocument.get_user_list()
Documentation
You will need sphinx installed to generate the documentation. Documentation can be generated by running python setup.py doc. Generated documentation can be found in doc/build/html/. You can read the current docs at ReadTheDocs.