Python 驱动 MongoDB 示例(PyMongo)
Python 的MongoDB驱动 pymongo ,使用pip Install pymongo安装即可
最近发现网上的很多实例已经过时了,在此自我探究记录下来。
编写一个接口类来支持MongoDB的基本操作(连接数据库,添加文档,删除文档,更新文档,读取文档),代码基本功能已通过测试,但难免还有一些BUG,如果有,望指正,谢谢。
测试环境 Centos7 Python3.6.3
from pymongo import MongoClient
from bson.objectid import ObjectId
import syslog class MongoDriver(object):
def __init__(self, ip='localhost', port=27017):
"""Init MongoDB Option.
wait more option added.
"""
self.ip = ip
self.port = port def init_connect(self):
""" Connect To MongoDB.
return True or False.
"""
try:
self.client = MongoClient(self.ip, self.port)
except Exception as e:
syslog.syslog(syslog.LOG_ERR, "MongoClient Connect failed : " + str(e))
return False
else:
return True def init_db(self, db):
""" Connect To MongoDB -> DB.
return True or False.
"""
try:
self.db = self.client[db]
except Exception as e:
syslog.syslog(syslog.LOG_ERR, "MongoClient Getdb {db} failed:".format(db=db) + str(e))
self.db = ""
return False
else:
return True def init_collection(self, collection):
""" Connect To MongoDB -> DB -> collection.
return True or False.
""" try:
self.collection = self.db[collection]
except Exception as e:
syslog.syslog(syslog.LOG_ERR,\
"MongoClient GetCollection {collection} failed:".format(collection=collection) + str(e))
self.collection = ""
return False
else:
return True
def format_id(self, object_id):
"""
Format Id.
return a dict.
"""
return {'_id': ObjectId(object_id)} def insert_one(self, document):
"""
Insert One Document To MongoDB.
document must be a dict.
return a dict with document's inserted_id or False when Error occured
"""
if not isinstance(document, dict):
raise TypeError
try:
return self.collection.insert_one(document).inserted_id
except Exception as e:
syslog.syslog(syslog.LOG_ERR,\
"MongoClient Insert_one {document} failed:".format(document=document) + str(e))
return False def insert_many(self, documents):
"""
Insert Many Documents To MongoDB.
documents must be a list.
eveny document must be a dict.
return a list with documents's inserted_ids or False when Error occured
"""
if not isinstance(documents, list):
raise TypeError
for document in documents:
if not isinstance(document, dict):
raise TypeError
try:
return self.collection.insert_many(documents).inserted_ids
except Exception as e:
syslog.syslog(syslog.LOG_ERR,\
"MongoClient insert_many {document} failed:".format(document=document) + str(e))
return False def find_one_by_id(self, object_id):
"""
Find Result By Object_id.
Return a dict with a document
"""
if not isinstance(object_id, str):
raise TypeError
try:
return self.collection.find_one(self.format_id(object_id)) except Exception as e:
syslog.syslog(syslog.LOG_ERR,\
"MongoClient find_by_id {id} failed:".format(id=object_id) + str(e))
return False def find_one_by_param(self, kws):
"""
Find Document By Object_id.
return a dict with a document
"""
if not isinstance(kws, dict):
raise TypeError
try:
return self.collection.find_one(kws)
except Exception as e:
syslog.syslog(syslog.LOG_ERR,\
"MongoClient find_by_param {kws} failed:".format(kws=kws) + str(e))
return False def find_many_by_param(self, kws):
"""
Find Document By Object_id.
return a cursor object with a or many document
"""
if not isinstance(kws, dict):
raise TypeError
try:
return self.collection.find(kws)
except Exception as e:
syslog.syslog(syslog.LOG_ERR,\
"MongoClient find_by_param {kws} failed:".format(kws=kws) + str(e))
return False def update_one_by_id(self, object_id, kws):
"""
Update Document By Object_id.
Return True or False
"""
if not isinstance(kws, dict) :
raise TypeError try:
self.collection.update_one(self.format_id(object_id), {"$set": kws}, upsert=False)
except Exception as e:
syslog.syslog(syslog.LOG_ERR,\
"MongoClient update_one_by_id failed:" + str(e))
return False
else:
return True
def update_one_by_param(self, condition, kws):
"""
Update Document By Object_id.
Return True or False
"""
if not isinstance(condition, dict) or not isinstance(kws, dict):
raise TypeError
try:
self.collection.update_one(condition, {"$set": kws}, upsert=False)
except Exception as e:
syslog.syslog(syslog.LOG_ERR,\
"MongoClient update_one_by_param failed:" + str(e))
return False
else:
return True def update_many_by_param(self, condition, kws):
"""
Update Document By Object_id.
Return True or False
"""
if not isinstance(condition, dict) or not isinstance(kws, dict):
raise TypeError
try:
self.collection.update_many(condition, {"$set": kws}, upsert=False)
except Exception as e:
syslog.syslog(syslog.LOG_ERR,\
"MongoClient update_many_by_param failed:" + str(e))
return False
else:
return True def remove_all(self):
"""
Remove all documents from a collection .
Return True or False
"""
try:
self.collection.remove()
except Exception as e:
syslog.syslog(syslog.LOG_ERR,\
"MongoClient remove_all failed:" + str(e))
return False
else:
return True def remove_documents(self, kws):
"""
Remove some documents from a collection .
Return True or False
"""
if not isinstance(kws, dict):
raise TypeError
try:
self.collection.remove(kws)
except Exception as e:
syslog.syslog(syslog.LOG_ERR,\
"MongoClient remove_documents failed:" + str(e))
return False
else:
return True
Python 驱动 MongoDB 示例(PyMongo)的更多相关文章
- Windows平台下为Python添加MongoDB支持PyMongo
到Python官网下载pymongo-2.6.3.win-amd64-py2.7.exe 安装pymongo-2.6.3.win-amd64-py2.7.exe 参照官方的用例进行测试 打开命令提示符 ...
- 2.1 python使用MongoDB 示例代码
import pymongo client = pymongo.MongoClient('localhost', 27017) # MongoDB 客户端 walden = client['walde ...
- CentOS平台下为Python添加MongoDB支持PyMongo
下载PyMongo [root@leezhen ~]# wget https://pypi.python.org/packages/source/p/pymongo/pymongo-2.6.3.tar ...
- MongoDB的安装与python操作MongoDB
一.安装MongoDB 因为我个人使用的是windows,就只记录下windows下的安装 1.下载安装 就是官网,下载msi,选个路径安装 2.配置 看见别的地方说需要手动在bin同级目录创建dat ...
- pymongo和mongoengine安装和使用教程 包含常用命令行和代码示例 | pymongo and mongoengine tutorial on ubuntu 16.04
本文首发于个人博客https://kezunlin.me/post/e88f04e5/,欢迎阅读最新内容! pymongo and mongoengine tutorial on ubuntu 16. ...
- MongoDB聚合查询及Python连接MongoDB操作
今日内容概要 聚合查询 Python操作MongoDB 第三方可视化视图工具 今日内容详细 聚合查询 Python操作MongoDB 数据准备 from pymongo import MongoCli ...
- Python 连接MongoDB并比较两个字符串相似度的简单示例
本文介绍一个示例:使用 pymongo 连接 MongoDB,查询MongoDB中的 字符串 记录,并比较字符串之间的相似度. 一,Python连接MongoDB 大致步骤:创建MongoClient ...
- python操作三大主流数据库(8)python操作mongodb数据库②python使用pymongo操作mongodb的增删改查
python操作mongodb数据库②python使用pymongo操作mongodb的增删改查 文档http://api.mongodb.com/python/current/api/index.h ...
- Python操作MongoDB代码示例
import pymongo #pip install pymongo安装python操作mongodb的模块 myclient=pymongo.MongoClient(host='127.0.0.1 ...
随机推荐
- http——解读梳理
(1)在客户端与服务器建立准确连接传输之前,先讲一讲三次握手 第一次握手:建立连接时,客户端发送syn包[同步序列编号(Synchronize Sequence Numbers).是TCP/IP建立连 ...
- Python【知识点】面试小点列表生成式小坑
1.问题 有这么一个小面试题: 看下面代码请回答输出的结果是什么?为什么? result = [lambda x: x + i for i in range(10)] print(result[0]( ...
- 【uoj3】 NOI2014—魔法森林
http://uoj.ac/problem/3 (题目链接) 题意 给出一张带权图,每条边有两个权值A和B,一条路径的花费为路径中的最大的A和最大的B之和.求从1走到n的最小花费. Solution ...
- 前端学习 -- Css -- 字体
设置字体颜色,使用color来设置文字的颜色 设置文字的大小,浏览器中一般默认的文字大小都是16pxfont-size设置的并不是文字本身的大小,在页面中,每个文字都是处在一个看不见的框中的我们设置的 ...
- bzoj4542: [Hnoi2016]大数(莫队)
这题...离散化...$N$和$n$搞错了...查了$2h$...QAQ 考虑$s[l...r]$,可以由两个后缀$suf[l]-suf[r+1]$得到$s[l...r]$代表的数乘$10^k$得到的 ...
- Turn your Session into FlushMode.COMMIT/AUTO or remove 'readOnly' marker from transaction 异常一例
参考下面的文章,最终找到我的报错原因: 我是在 service中一个以 get开头的方法中,加入了一行数据库数据删除代码,因为 spring的事务配置中,配置了get开头的方法 是 readonle的 ...
- Eclipse Neon安装指导
[下载] 前往Eclipse官网:http://www.eclipse.org/,点击DOWNLOAD: 进入下载页面后,会显示如下下载界面: 找到 Get Eclipse Neon,然后点击下面的” ...
- Object类型的怎么判断空值
例如 Object result; 我直接这样是不行的 if(result==null) //这样是错的 ... 要这样判断 if(result == System.DBNull.Value) //这 ...
- decimal, float 和double
阿里的 Java 手册里写着: 6. [强制] 小数类型为 decimal,禁止使用 float 和 double. 说明:float 和 double 在存储的时候,存在精度损失的问题,很可能在值的 ...
- [整理]Assembly中的DLL提取
当机器上安装一些程序后,Assembly中的DLL会变得越来越丰富. 拿个常见问题来说明. 安装ReportViewer后其中会出现以下DLL. Microsoft.ReportViewer.Proc ...