Monguo icon indicating copy to clipboard operation
Monguo copied to clipboard

Asynchronous MongoDB ORM for Tornado

====== Monguo

.. image:: https://github.com/shiyanhui/monguo/blob/master/doc/source/_static/monguo.jpg?raw=true :width: 200px

:Info: Monguo is a full-featured, asynchronous MongoDB_ ORM with Motor_ dirver for Tornado_ applications. :Author: Lime YH.Shi

.. image:: https://img.shields.io/pypi/v/monguo.svg :target: https://crate.io/packages/monguo

.. image:: https://img.shields.io/pypi/dm/monguo.svg :target: https://crate.io/packages/monguo

Installation

.. code-block:: bash

$ pip install monguo

Dependencies

Monguo works in all the environments officially supported by Tornado_ and Motor_. It requires:

  • Tornado_ >= 3.0
  • Motor_ >= 0.2

Examples

.. code-block:: python

from monguo import *

Connection.connect('db') # connect to database

class UserDocument(Document):
    name  = StringField(required=True, unique=True, max_length=20)
    email = EmailField(required=True)
    age   = IntegerField()
    sex   = StringField(default='male', candidate=['male', 'female'])

    meta = {
        'collection': 'user'
    }

    @gen.coroutine
    def get_user_list(skip=0, limit=None):
        cursor = UserDocument.find().skip(skip)

        if limit is not None:
            assert isinstance(limit, int) and limit > 0
            cursor.limit(limit)

        user_list = yield cursor.to_list(None)
        raise gen.Return(user_list)

# insert
user_id = yield UserDocument.insert({
    'name': 'Bob',
    'email': '[email protected]'
})

# query
user = yield UserDocument.find_one({'name': 'Bob'})
user_list = yield UserDocument.get_user_list()

# update
yield UserDocument.update(
    {'_id': user_id}, 
    {'$set': {'age': 19}})

# delete
yield UserDocument.remove({'_id': user_id})

.. _MongoDB: http://mongodb.org .. _Tornado: http://tornadoweb.org .. _Motor: https://github.com/mongodb/motor