Python项目中MongoDB操作包括哪些,怎么实现
Admin 2022-07-08 群英技术资讯 450 次浏览
MongoDB属于 NoSQL(非关系型数据库),是一个基于分布式文件存储的开源数据库系统。
python 使用第三方库来连接操作 MongoDB,所以我们首先安装此库。
pip3 install pymongodb
使用 MongoClient 类连接,以下两种参数方式都可以:
from pymongo import MongoClient # 连接方式一 client = MongoClient(host='localhost',port=27017) # 连接方式二 # client = MongoClient('mongodb://localhost:27017/')
MongoDB 可以创建很多 db,指定我们需要的 db 即可
# 方式一 db = client.Monitor # 方式二 # db = client['Monitor']
db 内包含很多个集合,有点类似 mysql 这类关系型数据库中的表
# 方式一 collection = db.test # 方式二 # collection = db['test']
插入一条数据,MongoDB 每条记录都有一个唯一标识。返回一个 InsertOneResult 对象,若需要获取唯一标识,找到 InsertOneResult 对象的属性 inserted_id 即可
from pymongo import MongoClient class mongodb: def __init__(self,host,db,port = 27017): ''' :param host: str mongodb地址 :param db: str 数据库 :param port: int 端口,默认为27017 ''' host = host db = db self.port = port client = MongoClient(host=host,port=port) self.db = client[db] def insert_one(self,table,dic): ''' :param table: str 数据库中的集合 :param dic: dict 要插入的字典 :return: 返回一个包含ObjectId类型的对象 ''' collection = self.db[table] rep = collection.insert_one(dic) return repif __name__=='__main__': dic = {'姓名':'小明','English':100,'math':90} db = mongodb(host='localhost',db = 'test') rep = db.insert_one('test',dic) print(rep.inserted_id)
插入多条数据,使用 insert_many 批量插入
from pymongo import MongoClient class mongodb: def __init__(self,host,db,port = 27017): ''' :param host: str mongodb地址 :param db: str 数据库 :param port: int 端口,默认为27017 ''' host = host db = db self.port = port client = MongoClient(host=host,port=port) self.db = client[db] def insert_one(self,table,dic): ''' :param table: str 数据库中的集合 :param dic: dict 要插入的字典 :return: 返回包含一个ObjectId类型的对象 ''' collection = self.db[table] rep = collection.insert_one(dic) return rep def insert_many(self,table,lists): ''' :param table: str 数据库中的集合 :param dic: dict 要插入的列表,列表中的元素为字典 :return: 返回包含多个ObjectId类型的列表对象 ''' collection = self.db[table] rep = collection.insert_many(lists) return rep if __name__=='__main__': lists = [{'姓名':'小明','English':100,'math':90}, {'姓名':'小华','English':90,'math':100}] db = mongodb(host='localhost',db = 'test') rep = db.insert_many('test',lists) for i in rep.inserted_ids: print(i)
1)常规查询
from pymongo import MongoClient class mongodb: def __init__(self,host,db,port = 27017): ''' :param host: str mongodb地址 :param db: str 数据库 :param port: int 端口,默认为27017 ''' host = host db = db self.port = port client = MongoClient(host=host,port=port) self.db = client[db] def find_one(self,table,dic): ''' :param table: str 数据库中的集合 :param dic: dict 查询条件 :return: dict 返回单条记录的字典 ''' collection = self.db[table] rep = collection.find_one(dic) return rep def find(self,table,dic): ''' :param table: str 数据库中的集合 :param dic: dict 查询条件 :return: list 返回查询到记录的列表 ''' collection = self.db[table] rep = list(collection.find(dic)) return rep if __name__=='__main__': # 查询 English 成绩为 100 的所有记录 dic = {'English':100} db = mongodb(host='localhost',db = 'test') rep = db.insert_many('test',dic) print(rep)
2)范围查询
有时候我们需要范围比较查询,比如要查询 English 成绩为 80~90 ,可以使用比较符:dic = {'English':{'$in':[80,90]}}
3)计数
直接调用 count() 方法,返回一个 int 类型的数字
# 计数查询只需要在普通查询后加上 count() 即可 count = collection.find().count() # count = collection.find({'English':{'$gt':90}}).count()
4)排序
排序时,直接调用sort()方法,并在其中传入排序的字段及升降序标志,返回一个游标对象
# 正序 ASCENDING,倒序 DESCENDING。list()将游标对象转成列表 data = list(collection.find(dic).sort('姓名',pymongo.DESCENDING))
首选查到需要更新的数据,然后将该数据更新,返回一个 UpdataResult 对象, raw_result 属性中包含 update 生效的个数。
from pymongo import MongoClient class mongodb: def __init__(self,host,db,port = 27017): ''' :param host: str mongodb地址 :param db: str 数据库 :param port: int 端口,默认为27017 ''' host = host db = db self.port = port client = MongoClient(host=host,port=port) self.db = client[db] def update_one(self,table,condition,dic): ''' :param table: str 数据库中的集合 :param condition: dict 查询条件 :param dic: dict 更新的数据 :return: 返回UpdateResult对象 ''' collection = self.db[table] # $set 表示只更新dic字典内存在的字段 rep = collection.update_one(condition,{'$set':dic}) # 会把之前的数据全部用dic字典替换,如果原本存在其他字段,则会被删除 # rep = collection.update_one(condition, dic) return rep def update_many(self,table,condition,dic): ''' :param table: str 数据库中的集合 :param condition: dict 查询条件 :param dic: dict 更新的数据 :return:返回UpdateResult对象 ''' collection = self.db[table] # $set 表示只更新dic字典内存在的字段 rep = collection.update_many(condition,{'$set':dic}) # 会把之前的数据全部用dic字典替换,如果原本存在其他字段,则会被删除 # rep = collection.update_many(condition, dic) return rep if __name__=='__main__': condition = {'English':80} dic = {'English':60} db = mongodb(host='mongodb-monitor.monitor.svc.test.local',db = 'test') rep = db.update_one('test',condition,dic) print(rep.raw_result) # 输出 {'n': 1, 'nModified': 1, 'ok': 1.0, 'updatedExisting': True}
删除和 update 类似,删除数据后,返回一个 DeleteResult 对象, raw_result 属性中包含 delete 的个数
from pymongo import MongoClient class mongodb: def __init__(self,host,db,port = 27017): ''' :param host: str mongodb地址 :param db: str 数据库 :param port: int 端口,默认为27017 ''' host = host db = db self.port = port client = MongoClient(host=host,port=port) self.db = client[db] def delete_one(self,table,dic): ''' :param table: str 数据库中的集合 :param dic: dict 查询条件 :return: 返回DeleteResult对象 ''' collection = self.db[table] rep = collection.delete_one(dic) return rep def delete_many(self,table,dic): ''' :param table: str 数据库中的集合 :param dic: dict 查询条件 :return: 返回DeleteResult对象 ''' collection = self.db[table] rep = collection.delete_many(dic) return rep if __name__=='__main__': dic = {'English':60} db = mongodb(host='localhost',db = 'test') rep = db.delete_many('test',dic) print(rep.raw_result) # 输出 {'n': 21, 'ok': 1.0}
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
Pandas是当前Python数据分析中最为重要的工具,其提供了功能强大且灵活多样的API,可以满足使用者在数据分析和处理中的多种选择和实现方式,下面这篇文章主要给大家介绍了关于Python Pandas聚合函数的相关资料,需要的朋友可以参考下
首先明确的是self只有在类的方法中才会有,独立的函数或方法是不必带有self的。self在定义类的方法时是必须有的,虽然在调用时不必传入相应
本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于内置模块OS如何打造SHELL端文件处理器的相关内容,下面一起来看一下,希望对大家有帮助。
这篇文章主要和大家分享几个Python Pandas中处理CSV文件的常用技巧,如:统计列值出现的次数、筛选特定列值、遍历数据行等,需要的可以参考一下
这篇文章主要为大家介绍了python目标检测yolo3详解预测及代码复现,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008