PyMongo使用入门(四)
来源:互联网 发布:淘宝鹊桥软件 编辑:程序博客网 时间:2024/06/09 17:05
批量插入
import pymongofrom pprint import pprintfrom pymongo.errors import BulkWriteErrordb = pymongo.MongoClient().bulk_exampledb.test.insert_many([{'i': i} for i in range(10000)]).inserted_ids
有序批量写操作
#初始化bulk()#有序列表操作bulk = db.test.initialize_ordered_bulk_op()#删除所有文件bulk.find({}).remove()bulk.insert({'_id': 1})bulk.insert({'_id': 2})bulk.insert({'_id': 3})bulk.find({'_id': 1}).update({'$set': {'foo': 'bar'}})bulk.find({'_id': 4}).upsert().update({'$inc': {'j': 1}})bulk.find({'j': 1}).replace_one({'j': 2})result = bulk.execute()pprint(result)
如图:
错误处理
"""发生(如重复键错误)第一个写失败中止剩余的操作,PyMongo提高BulkWriteError。异常实例的详细信息attibute提供执行结果,直到发生故障,对故障的详细信息 - 包括导致失败的操作。"""bulk = db.test.initialize_ordered_bulk_op()bulk.find({'j': 2}).replace_one({'i': 5})#违反了_id唯一键约束。bulk.insert({'_id': 4})bulk.find({'i': 5}).remove_one()try: bulk.execute()except BulkWriteError as bwe: pprint(bwe.details)
如图:
无序批量写操作
"""#无序批量写操作#在无序批量操作的情况下却没有保证的操作被执行的顺序"""bulk = db.test.initialize_unordered_bulk_op()bulk.insert({'_id': 1})bulk.find({'_id': 2}).remove_one()bulk.insert({'_id': 3})bulk.find({'_id': 4}).replace_one({'i': 1})try: pprint(bulk.execute())except BulkWriteError as bwe: pprint(bwe.details)
写入策略(writeConcern)
"""首先列一下WriteConcern的几种抛出异常的级别参数: WriteConcern.NONE:没有异常抛出 WriteConcern.NORMAL:仅抛出网络错误异常,没有服务器错误异常 WriteConcern.SAFE:抛出网络错误异常、服务器错误异常;并等待服务器完成写操作。 WriteConcern.MAJORITY: 抛出网络错误异常、服务器错误异常;并等待一个主服务器完成写操作。 WriteConcern.FSYNC_SAFE: 抛出网络错误异常、服务器错误异常;写操作等待服务器将数据刷新到磁盘。 WriteConcern.JOURNAL_SAFE:抛出网络错误异常、服务器错误异常;写操作等待服务器提交到磁盘的日志文件。 WriteConcern.REPLICAS_SAFE:抛出网络错误异常、服务器错误异常;等待至少2台服务器完成写操作。 MongoDB使用w:1作为默认值。可选值和含义如下: 1 对于单个的mongod或者集群的主要节点,提供了答复 0 禁止最基本的答复功能,只提供了关于套接字异常和网络错误的信息给客户端。如果禁止答复的同时要求日志,那么日志请求会被执行,服务器会进行答复 大于1 针对集群,要求1个主节点和w-1个从节点答复,如果w的值大于主节点和从节点的和,那么会一直阻塞直到别的节点上线 majority 针对集群,要求所有投票节点的大部分进行答复。这样就避免了硬编码的节点数量,更加灵活。在3.0版本之前,对应的是成员节点的大部分。""""""wtimeout这个值只针对w的值设置为大于1的场合有效,即只针对副本集环境有效。当发生超时时就会返回一个错误,即使最终数据write成功了,这时mongodb不会回滚已经修改成功的数据。该值设置为0就是不做限制。"""bulk = db.test.initialize_ordered_bulk_op()bulk.insert({'a': 0})bulk.insert({'a': 1})bulk.insert({'a': 2})bulk.insert({'a': 3})try: bulk.execute({'w': 3, 'wtimeout': 1})except BulkWriteError as bwe: pprint(bwe.details)
0 0
- PyMongo使用入门(四)
- PyMongo使用入门(一)
- PyMongo使用入门(二)
- PyMongo使用入门(三)
- PyMongo使用入门(五)
- PyMongo使用入门(六)
- PyMongo使用入门(七)
- Pymongo Tutorial & Pymongo入门教
- pymongo使用
- pymongo 使用
- mongoDB-pymongo-入门
- pymongo(1) pymongo的基本使用
- pymongo使用问题汇总
- PyMongo基本使用
- PyMongo基本使用
- pymongo 使用小结
- PyMongo基本使用
- PyMongo基本使用
- git 忽略不想上传的文件
- mvc后台解析json
- lua中的基本类型
- c/c++/c# 快速计算 Cumulative Normal Distribution 正态累积函数CDF
- 线程池
- PyMongo使用入门(四)
- 在命令行模式下与程序互动
- Android Studio分享项目到github上
- JavaSE_04面向对象2
- c#索引器
- JavaSE_05面向对象3
- Google Play Services Location:接收位置更新
- UVA10655-Contemplation! Algebra
- select count(*) from sys_passport where register_time between '2016-07-21 00:00:00' and '2016-07-22