tornado中使用motor异步操作mongodb
2013-12-31 00:11
447 查看
http://motor.readthedocs.org/en/stable/
motor是一个建立在tornado和mongodb上的异步操作库,能够实现所有的mongodb操作。
一:导入module
import motor
二:连接mongodb
[python] view
plaincopy
db = motor.MotorClient('10.28.0.163').open_sync().project_test
与pymongo的不同在与使用motor时必须加上 open_sync(),这里的连接时异步的。
相同情况下使用pymongo的命令为:
[python] view
plaincopy
db = pymongo.Connection('10.28.0.163').project_test
#这样是blocking的
三:操作mongodb
motor主要提供了两种操作mongodb的形式
1:第一种是在原有pymongo操作的基础上加入了回调函数
例如
[python] view
plaincopy
#原来的pymongo操作
find = db.test.find_one({'key':'value'})
new = db.test.update({'spec':'spec'},{'$set':{'key':'value'}})
[python] view
plaincopy
#motor操作
find = db.test.find_one({'key':'value'},callback=_on_result1)
new = db.test.update({'spec':'spec'},{'$set':{'key':'value'}},callback = _on_result2)
@tornado.web.asynchronous
def _on_result1(result,error):
if error:
do something
do something
def _on_result1(result,error):
if error:
do something
do something
关于某些mongodb操作的回调函数的使用,motor有特别的规定,如find()需要调用motor的to_list(),具体情况需要用时请查询motor文档http://motor.readthedocs.org/en/stable/index.html
2.第二种方法, motor还提供了基于tornado的gen模块的操作,简单来说就是不在需要调用回调函数,而是采用yield来实现异步。
还是用上面的两个命令为例:
[python] view
plaincopy
#motor操作
import tornado
import motor
class someHandler(tornado.web.RequestHandler):
@tornado.web.asynchronous
def post(self):
......do something....
self.operation(db)
....do something ....
@tornado.gen.engine
def operation():
find = yield motor.Op(db.test.find_one,{'key':'value'})
new =yield motor.Op(db.test.update,{'spec':'spec'},{'$set':{'key':'value'}})
这里,yield motor.Op(...) 将里面的内容异步执行,并根据异步执行的结果返回不同的值:
若执行结果是一个error,则返回error=some_error
若执行结果没有出错,则返回result = some_result
需要注意的是若要使用这种方法必须要加上标识@tornado.gen.engine
motor是一个建立在tornado和mongodb上的异步操作库,能够实现所有的mongodb操作。
一:导入module
import motor
二:连接mongodb
[python] view
plaincopy
db = motor.MotorClient('10.28.0.163').open_sync().project_test
与pymongo的不同在与使用motor时必须加上 open_sync(),这里的连接时异步的。
相同情况下使用pymongo的命令为:
[python] view
plaincopy
db = pymongo.Connection('10.28.0.163').project_test
#这样是blocking的
三:操作mongodb
motor主要提供了两种操作mongodb的形式
1:第一种是在原有pymongo操作的基础上加入了回调函数
例如
[python] view
plaincopy
#原来的pymongo操作
find = db.test.find_one({'key':'value'})
new = db.test.update({'spec':'spec'},{'$set':{'key':'value'}})
[python] view
plaincopy
#motor操作
find = db.test.find_one({'key':'value'},callback=_on_result1)
new = db.test.update({'spec':'spec'},{'$set':{'key':'value'}},callback = _on_result2)
@tornado.web.asynchronous
def _on_result1(result,error):
if error:
do something
do something
def _on_result1(result,error):
if error:
do something
do something
关于某些mongodb操作的回调函数的使用,motor有特别的规定,如find()需要调用motor的to_list(),具体情况需要用时请查询motor文档http://motor.readthedocs.org/en/stable/index.html
2.第二种方法, motor还提供了基于tornado的gen模块的操作,简单来说就是不在需要调用回调函数,而是采用yield来实现异步。
还是用上面的两个命令为例:
[python] view
plaincopy
#motor操作
import tornado
import motor
class someHandler(tornado.web.RequestHandler):
@tornado.web.asynchronous
def post(self):
......do something....
self.operation(db)
....do something ....
@tornado.gen.engine
def operation():
find = yield motor.Op(db.test.find_one,{'key':'value'})
new =yield motor.Op(db.test.update,{'spec':'spec'},{'$set':{'key':'value'}})
这里,yield motor.Op(...) 将里面的内容异步执行,并根据异步执行的结果返回不同的值:
若执行结果是一个error,则返回error=some_error
若执行结果没有出错,则返回result = some_result
需要注意的是若要使用这种方法必须要加上标识@tornado.gen.engine
相关文章推荐
- python tornado motor 异步操作mongodb
- Tornado的Mongodb异步操作—Motor
- python motor异步mongodb操作
- tornado中使用celery实现异步MySQL操作
- tornado中使用celery实现异步MySQL操作
- Mongodb学习一,开始使用C# Driver操作Mongodb
- MongoDB使用小结:一些常用操作分享
- 简化异步操作(上):使用CCR和AsyncEnumerator简化异步操作
- 在BAE中使用mongoose操作mongodb
- 使用AsyncEnumerator简化异步操作(yield) 转
- 使用nodejs操作mongodb来实现增删改查
- MongoDB学习笔记(二)使用Java操作MongoDB
- 使用enumerator模式简化异步操作
- tornado_mongodb 连接和使用
- 使用JAVA操作MongoDB(Spring整合)
- mongoDB 性能优化:如何使用普通查询语句替代 aggregate 操作?
- java操作MongoDB:使用GridFS对文件进行操作
- .net4.0使用yield避免异步操作大量回调嵌套
- python 使用mongodb 数据库操作
- 使用java 操作mongodb的aggregate