(MongoDB+Tornado)是一个异步驱动程序和工具包,用于在Tornado应用程序中使用MongoDB

mongotor-skd的Python项目详细描述


#什么是Mongotor?

(mongodb+tornado)是一个异步工具包,用于在"tornado"应用程序中使用"mongodb"。Mongotor有一个python+tornado的纯实现,它只依赖于tornado和bson(由Pymongo提供)

``
*连接``池`
*支持运行数据库命令(``count``,``sum`,``mapreduce``等)
*``orm``喜欢映射文档和字段
*``signals``用于预保存、后保存、预删除、后删除、预更新和后更新
*100%的代码覆盖率(按测试)
接下来的步骤是支持:

*分片
*身份验证
*副本集中最近的首选项
*gridfs
*所有python版本(2.5、2.6、2.7、3.2和pypypy),现在只测试python 2.7

//mongotor.readthedocs.org/)获取更多示例



[pymongo](http://api.mongodb.org/python/current/)是在python中使用mongodb的推荐方法,但它不是异步的,也不在de tornado的ioloop中运行。如果你使用Pymongo,你不会利用龙卷风的优势。



[马达](http://emptysquare.net/motor/)包装pymongo并使其与greenlet异步。是一个伟大的项目,但它使用绿色。如果你能用绿色的,为什么不用绿色的替代龙卷风呢?pymongo已经在gevent中工作了,您不需要考虑使用回调编写所有代码。我的观点是,如果您使用的是一个非常强大的无阻塞web服务器,带有纯python代码,那么您可能需要使用一个纯tornado驱动程序来访问mongo,显然,因为这个模块完全支持像pymongo这样的mongodb功能。



[asyncMongo](https://github.com/bitly/asyncMongo)是一个使用tornado.ioloop访问MongoDB的异步库,但是没有实现副本集和其他MongoDB功能。

此外,这个项目走得不是很好,或者更好,也不是很快。存在许多问题和拉取请求,但这些问题和请求并没有被发现。

##安装

``` bash
pip install mongotor
```

初始化(self):
self.db=database.init('localhost:27017','mongotor嫒test')

@tornado.web.asynchronous
@gen.engine
def get(self):
user={''u id':objectid(),'name':'user name'}
yield gen.task(self.db.user.insert,user)

yield gen.task(self.db.user.update,user['''u id',{"$set":{'name':'new user name'})


user\u found=yield gen.task(self.db.user.find\u one,user[''u id'])
assert user\u found['name'='new user name'

yield gen task(self.db.user.remove,user[''u id'})'])
```

``python
``import tornado.web
from tornado import gen
from mongotor.database import database
from mongotor.node import readpreference
from bson import objectid
import time



class handler(tornado.web.requesthandler):

def initialize(self):


@tornado.web.asynchronous
@gen.engine
def get(self):
user={"u id":objectid()}



read from secondary
user\u found=yield gen.task(self.db.user.find\u one,user["u id"])
assert user\u found==user
`````

m datetime import datetime
import tornado.web
from tornado import gen


u collection="user"

name=field.stringfield()
active=field.booleanfield()
created=field.datetimefield()


类处理程序(tornado.web.requesthandler):

@tornado.web.asynchronous
@gen.engine
def get(self):
user=user()
user.name="user name"
user.active=true
user.created=datetime.now()


yield gen.task(user.save)

update date
user.name="new name"
yield gen.task(user.u更新)

tetime.now()



users_actives[0].active=false
yield gen.task(users_actives[0].save)

为新功能编写测试并发送请求。


Mongo
让Mongo启动

配置复制集
让Mongo配置

运行测试
让测试
``````

问题

请通过[ GitHub问题](https://github.com/marcelnicolay/mongotor/issues)报告任何问题

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Spark sample()函数是否复制数据?   java如何在API中返回单例列表?   java我可以生成提供输入/输出的哈希函数吗?   如何“使用MATLAB或JAVA”从文本文件中读取数字并将其保存在数组中?   java如何将十进制转换为十六进制?   JavaPostXML文件   java XStream如何在XML中不存在带注释的字段时引发异常   java Tomcat启动批处理问题   java AccessControlException与同一代码库中的小程序类   java如何将长本地时间戳转换为字符串UTC时间戳   java在同一个JavaVM中有多个沙盒   改进LDAP的Java代码   拖放后未附加到DOM的java元素   java通过socket发送压缩数据