(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 Cassandra复制因子大于节点数   java J2EE JTA事务回滚不适用于OSE Glassfish 4.0(Build 89)   java spring安全预认证用户登录   org的java类文件。反应流。从RxJava编译示例时未找到Publisher?   java在使用dataFormat作为POJO通过Camel调用Web服务时无法设置SOAP标头   Javafx类的java静态实例   java如何防止一个部件在关闭时覆盖另一个部件的位置   sql server无法从我的java代码连接到数据库   java在JList(Swing)中显示带有的ArrayList   从Java中的CXF服务获取WSAddressing数据   使用资产文件夹进行java简单json解析(本地)   java LDAPException未绑定的无效凭据   JavaJSFspring部署到weblogic   JAVA中字符数组中的特定元素排列?   如果脚本位于不同的目录中,则ant不会使用exec标记运行Javashell脚本