Python对MongoDB数据库的增、删、改、查操作,独立封装版

文摘   科技   2024-01-29 11:26   北京  


ISEE小语


做人要谦虚,多听听别人的意见,然后记录下来,看看是谁对你有意见。




    MongoDB是一个基于文档存储的NoSQL数据库,由MongoDB Inc.维护和支持。与传统的关系型数据库相比,MongoDB提供了高性能、高可用性和易扩展性的特点。

    通过Python操作MongoDB也是比较常见的操作,本次分享Python对MongoDB数据库的增、删、改、查的基本操作。并做独立的封装,方便日常的调用。




环境:

IDE
Pycharm
Python
3.9.16
三方库
pymongo==4.6.1




导入:

from pymongo import MongoClient



一、连接到数据库

创建新数据库my_database,并创建一个users集合。

MongoDB中的数据库实际上是在第一次向其写入文档时创建的。即,如果数据库my_database不存在,那么在下面增加文档的时候自动创建。

# 连接到MongoDB@propertydef connect(self):    client = MongoClient('mongodb://localhost:27017/')    db = client['my_database']    collection = db['users']    return client, collection

(左右滑动查看完整代码)



二、关闭连接

关闭连接

# 关闭连接@staticmethoddef connect_close(client):    client.close()

(左右滑动查看完整代码)

注:在大多数情况下,这不是必需的,因为Python脚本运行完毕,MongoDB客户端实例会在脚本结束时自动关闭连接。但为了在脚本运行过程中显式关闭数据库连接,这里可以在每次执行的时候进行关闭。



三、插入【insert】

为了方便,我们将插入分为单文档插入和批量插入

# 单文档插入def insert_one(self, data: dict):    client, collection = self.connect    try:        result = collection.insert_one(data)        return result.inserted_id    except DuplicateKeyError as e:        return None    finally:        self.connect_close(client)
# 批量插入def insert_many(self, data: list): client, collection = self.connect try: result = collection.insert_many(data) return result.inserted_ids except DuplicateKeyError as e: return None finally: self.connect_close(client)

(左右滑动查看完整代码)

调用执行:

# 单文档插入user = {"name": "John", "age": 19, "sex": "man", "is_login": True}result = mongo.insert_one(user)print(result)
# 批量插入users = [ {"name": "Tom", "age": 21, "sex": "man", "is_login": False}, {"name": "Sandy", "age": 18, "sex": "woman", "is_login": True}, {"name": "Lily", "age": 23, "sex": "woman", "is_login": True}]result = mongo.insert_many(users)print(result)

(左右滑动查看完整代码)

结果:


四、更新【update】

为了方便,我们将更新分为单文档更新和批量更新

# 单文档更新def update_one(self, conditions: dict, set_value: dict):    client, collection = self.connect    try:        result = collection.update_one(            conditions,            {"$set": set_value}        )        return result.matched_count    except DuplicateKeyError as e:        return None    finally:        self.connect_close(client)
# 批量更新def update_many(self, conditions: dict, set_value: dict): client, collection = self.connect try: result = collection.update_many( conditions, {"$set": set_value} ) return result.matched_count except DuplicateKeyError as e: return None finally: self.connect_close(client)

(左右滑动查看完整代码)

调用执行:

# 单文档更新condition = {"name": "John"}set_value = {"age": 27, "is_login": False}result = mongo.update_one(condition, set_value)print(f"成功更新 {result} 位用户!")
# 批量文档更新condition = {"sex": "woman"}set_value = {"age": 20, "is_login": False}result = mongo.update_many(condition, set_value)print(f"成功更新 {result} 位用户!")

(左右滑动查看完整代码)

结果:


五、查询【find】

为了方便,我们将分为单文档查询、多文档查询

# 查询单文档def find_one(self, conditions: dict):    client, collection = self.connect    result = collection.find_one(conditions)    return result
# 查询多文档def find(self, conditions: dict): client, collection = self.connect result = collection.find(conditions) return result

(左右滑动查看完整代码)

调用执行:

1. 查询单文档

    查询name为John的数据,如果多个名叫John的人,也只会显示第一条数据

# 查询单文档result = mongo.find_one({"name": "John"})print(result)

(左右滑动查看完整代码)

结果:


2. 查询多文档

    查询性别sex为man的数据,只以符合条件,就会查出所有

# 查询多文档result = mongo.find({"sex": "man"})for r in result:    print(r)

(左右滑动查看完整代码)

结果:

3. 查询多文档,并排序

    查询性别sex为man的数据,只以符合条件,就会查出所有,并且根据age排序

# 查询排序result = mongo.find({"sex": "man"})for r in result.sort('age'):    print(r)

(左右滑动查看完整代码)

结果:


4. 查询多文档,并取第一条

    查询性别sex为man的数据,只以符合条件,就会查出所有,并且取第一条

# 查询第一条result = mongo.find({"sex""man"})for r in result.limit(1):    print(r)

(左右滑动查看完整代码)

结果:


5. 查询多文档,排序后并取第一条

    查询性别sex为man的数据,只以符合条件,就会查出所有,并且根据age排序后取第一条

# 组合使用,查询排序后取第一条result = mongo.find({"sex": "man"})for r in result.sort('age').limit(1):    print(r)

(左右滑动查看完整代码)

结果:




六、删除【delete】

为了方便,我们将分为单文档删除 和 批量删除

# 单文档删除def delete_one(self, conditions):    client, collection = self.connect    result = collection.delete_one(conditions)    self.connect_close(client)    return result.deleted_count
# 批量文档删除def delete_many(self, conditions): client, collection = self.connect result = collection.delete_many(conditions) self.connect_close(client) return result.deleted_count

(左右滑动查看完整代码)

调用执行:

1. 删除姓名name为John的用户

# 删除单文档result = mongo.delete_one({"name": "John"})print(f"成功删除 {result} 位用户!")

(左右滑动查看完整代码)

结果:


2. 删除年龄age为20的用户

# 删除多文档result = mongo.delete_many({"age": 20})print(f"成功删除 {result} 位用户!")

(左右滑动查看完整代码)

结果:



七、总结

    以上查、删、改的条件conditions,就像是Mysql中Sql语句的where条件,可以根据实际情况自定义

    注意每个方法中参数的格式,除了批量插入insert_many的data传入是list形式,其他的都是字典。


小栈整体封装了一下,方便使用:


有需求的朋友可自取哟

获取:后台回复"MongoDB"即可!


     

文章就分享到这儿,喜欢就点个吧!



推荐阅读  点击标题可跳转


ISEE小栈
没有花里胡哨,简单才是王道。
 最新文章