首页 > 数据库 >使用 Python 操作 Mongo 数据库

使用 Python 操作 Mongo 数据库

时间:2023-02-04 11:31:08浏览次数:43  
标签:Mongo Python sno 数据库 students student MongoDB age name


1. 简介

MongoDB 是一个基于分布式文件存储的数据库,旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。MongoDB 是一个介于关系数据库和非关系数据库之间的产品,它支持的查询语言非常强大,其语法类似于面向对象的查询语言,可以实现类似关系数据库单表查询的绝大部分功能。

Python 程序要访问 MongoDB,需要使用第三方模块 pymongo。

2. 安装 pymongo

pymongo 是 python 访问 mysql 数据库的模块。首先检查是否已经安装了 pymongo 模块,在 python 交互模式下 import pymongo,如下所示:

>>> import pymongo
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'pymongo'

如果出现错误:ModuleNotFoundError,则表示还没有安装 pymongo,使用 pip3 install mysql 安装 pymongo,如下所示:

$ pip3 install pymongo
Collecting pymongo
...
Installing collected packages: pymongo
Successfully installed pymongo-3.10.1

3. 启动 MongoDB

在 MonoDB 中创建数据库 school,在后面的小节中,将对数据库 school 进行增删改查。输入如下命令启动 MongoDB:

$ mkdir school
$ mongod --dbpath=./school >/dev/null
  • 在第 1 行,创建目录 school,用于存放 MongoDB 数据库 school 的内容
  • 在第 2 行,启动 MongoDB 的服务,指定 dbpath 为目录 school

4. 连接数据库

pymongo.MongoClient 方法连接 MongoDB,返回一个 MongoCLient 对象,示例如下:

import pymongo

def open_db():
global mongo
global school
global students

mongo = pymongo.MongoClient('mongodb://localhost')
school = mongo['school']
students = school['students']
  • 在第 1 行,引入 pymongo 模块
  • 在第 3 行,定义方法 open_db() 连接 MongoDB,后面的例子会引用该方法
  • 在第 4 行到第 6 行,声明 3 个全局变量
  • mongo 是连接 MongoDB 的对象
  • school 是 MongoDB 中的数据库
  • students 是 MongoDB 中的表
  • 在第 8 行,使用 ‘mongodb://localhost’ 作为 url 连接本地的 MongoDB
  • 在第 9 行,在 MongoDB 中创建数据库 school
  • 在第 10 行,在数据库 school 中创建表 students
  • mongo 是连接 MongoDB 的对象
  • school 是 MongoDB 中的数据库
  • students 是 MongoDB 中的表

5. 列出数据

MongoDB 的表提供了 find() 方法,查询表中的所有数据,类似 SQL 中的 SELECT * 操作:

def list_students():
for student in students.find():
print(student)
  • 在第 1 行,定义方法 list_students() 列出所有的学生的信息,后面的例子会引用该方法
  • 在第 2 行,students.find() 查询表 students 中所有的数据

6. 增加数据

6.1 增加一条数据

MongoDB 的表提供了 insert() 方法,向表中插入一条数据:

def add_one_student(sno, name, age):
student = {'sno': sno, 'name': name, 'age': age}
students.insert_one(student)
  • 在第 1 行,函数 add_one_student 向表 students 增加一个学生
  • 在第 2 行,构造一个字典对象 student
  • 在第 3 行,将字典 student 插入到表 students 中

编写测试程序如下:

add_one_student('1', 'tom', 11)
add_one_student('2', 'jerry', 12)
list_students()

程序运行输出如下:

{'_id': ObjectId('5ee328013ee9af43360b7a65'), 'sno': '1', 'name': 'tom', 'age': 11}
{'_id': ObjectId('5ee328013ee9af43360b7a66'), 'sno': '2', 'name': 'jerry', 'age': 12}

6.2 增加多条数据

MongoDB 的表提供了 insert_many() 方法,向表中插入多条数据:

def add_many_students():
tom = {'sno': '1', 'name': 'tom', 'age': 11}
jerry = {'sno': '2', 'name': 'jerry', 'age': 12}
array = [tom, jerry]
students.insert_many(array)
  • 在第 1 行,函数 add_many_students 向表 students 增加多个学生
  • 在第 2 行,构造一个字典对象 tom
  • 在第 3 行,构造一个字典对象 jerry
  • 在第 5 行,将学生 tom 和学生 jerry 插入到表 students 中

编写测试程序如下:

add_many_students()
list_students()

程序运行输出如下:

{'_id': ObjectId('5ee3281b673bfa2333f3c1f1'), 'sno': '1', 'name': 'tom', 'age': 11}
{'_id': ObjectId('5ee3281b673bfa2333f3c1f2'), 'sno': '2', 'name': 'jerry', 'age': 12}

6.3 用于测试的数据

编写函数 add_students_for_test,向表 students 中插入 4 条数据用于测试,在后面的小节将引用这个函数。

def add_students_for_test():
add_one_student('1', '张三', 11)
add_one_student('2', '李四', 12)
add_one_student('3', '王五', 13)
add_one_student('4', '李四', 14)

7. 修改数据

7.1 修改一条数据

MongoDB 的表提供了 update_one() 方法,修改表中符合查询条件的第一条数据:

def update_one_student(sno, name):
condition = {'sno': sno}
value = {'$set': {'name': name}}
students.update_one(condition, value)
  • 在第 2 行,设置查询条件为学号 sno
  • 在第 3 行,修改查询结果的姓名 name
  • 在第 4 行,查询表 students 中学号为 sno 的学生,修改符合查询条件的第一个学生的姓名 name

编写测试程序如下:

add_students_for_test()
update_one_student('1', 'ZhangSan')
update_one_student('2', 'LiSi')
list_students()
  • 在第 2 行,查找学号为 ‘1’ 的学生,将其姓名 name 修改为 ‘ZhangSan’
  • 在第 3 行,查找学号为 ‘2’ 的学生,将其姓名 name 修改为 ‘LiSi’

程序运行输出如下:

{'_id': ObjectId('5ee3284f14c80d192f214ea0'), 'sno': '1', 'name': 'ZhangSan', 'age': 11}
{'_id': ObjectId('5ee3284f14c80d192f214ea1'), 'sno': '2', 'name': 'LiSi', 'age': 12}
{'_id': ObjectId('5ee3284f14c80d192f214ea2'), 'sno': '3', 'name': '王五', 'age': 13}
{'_id': ObjectId('5ee3284f14c80d192f214ea3'), 'sno': '4', 'name': '李四', 'age': 14}

7.2 修改多条数据

MongoDB 的表提供了 update_many() 方法,修改表中符合查询条件的所有数据:

def update_many_students(old_name, new_name):
condition = {'name': old_name}
value = {'$set': {'name': new_name}}
students.update_many(condition, value)
  • 在第 2 行,设置查询条件为姓名 name
  • 在第 3 行,修改查询结果的姓名 name
  • 在第 4 行,查询表 students 中姓名为 name 的学生,修改所有符合查询条件学生的姓名 name

编写测试程序如下:

add_students_for_test()
update_many_students('李四', 'LiSi')
list_students()
  • 在第 2 行,查找姓名为 ‘李四’ 的学生,将其姓名 name 修改为 ‘LiSi’

程序运行输出如下:

{'_id': ObjectId('5ee328758ab7b33517380c8f'), 'sno': '1', 'name': '张三', 'age': 11}
{'_id': ObjectId('5ee328758ab7b33517380c90'), 'sno': '2', 'name': 'LiSi', 'age': 12}
{'_id': ObjectId('5ee328758ab7b33517380c91'), 'sno': '3', 'name': '王五', 'age': 13}
{'_id': ObjectId('5ee328758ab7b33517380c92'), 'sno': '4', 'name': 'LiSi', 'age': 14}

8. 删除数据

8.1 删除一条数据

MongoDB 的表提供了 delete_one() 方法,删除表中符合查询条件的第一条数据:

def delete_one_student(sno):
student = {'sno': sno}
students.delete_one(student)
  • 在第 2 行,设置查询条件为学号 sno
  • 在第 3 行,查询表 students 中学号为 sno 的学生,删除符合查询条件的第一个学生

编写测试程序如下:

add_students_for_test()
delete_one_student('1')
delete_one_student('2')
list_students()
  • 在第 2 行,删除学号为 ‘1’ 的学生
  • 在第 3 行,删除学号为 ‘2’ 的学生

程序运行输出如下:

{'_id': ObjectId('5ee328a441b99d0ffd2127ab'), 'sno': '3', 'name': '王五', 'age': 13}
{'_id': ObjectId('5ee328a441b99d0ffd2127ac'), 'sno': '4', 'name': '李四', 'age': 14}

8.2 删除多条数据

MongoDB 的表提供了 delete_many() 方法,删除表中所有符合查询条件的数据:

def delete_many_students(name):
student = {'name': name}
students.delete_many(student)
  • 在第 2 行,设置查询条件为姓名 name
  • 在第 3 行,查询表 students 中姓名为 name 的学生,删除所有符合查询条件的学生

编写测试程序如下:

add_students_for_test()
delete_many_students('李四')
list_students()

程序运行输出如下:

{'_id': ObjectId('5ee328d182f2558674a683db'), 'sno': '1', 'name': '张三', 'age': 11}
{'_id': ObjectId('5ee328d182f2558674a683dd'), 'sno': '3', 'name': '王五', 'age': 13}

8.3 删除所有数据

如果如果传递给 delete_many() 一个空的查询对象,则删除表中所有的数据:

def delete_all_students():
student = {}
students.delete_many(student)

编写测试程序如下:

add_students_for_test()
delete_all_students()
list_students()

将数据全部删除了,程序输出为空。

标签:Mongo,Python,sno,数据库,students,student,MongoDB,age,name
From: https://blog.51cto.com/10zhancom/6037021

相关文章

  • 0-3 数据库扩展
    数据库扩展QPS,单点故障使得数据库必须要进行扩展.扩展只需要做两件事情,数据拆分Sharding,数据复制Replica.数据拆分可以分摊写流量,数据复制可以做到读写分离.......
  • python如何替换word文档里面的特定的字符
    pipinstallpython-docx#第一步先安装python-docx模块importdocxdefreplace_text_in_word_document(file_path,old_text,new_text):doc=docx.Document(......
  • Python练习记录
    挑选了学习过程中的一部分练习进行记录,有些很简单的或重复性强的没有进行展示希望我们都能共同进步~练习1一个小球从100m的高度落下,每次弹回原高度的一半,计算:总共弹起来......
  • Python列表中你所不知道的事
    1.引言目前,Python是世界上使用最广泛、最受欢迎的编程语言之一。Python丰富的功能性使它非常流行,因为我们可以使用它创建任何内容。我将在本博客中与大家分享关于Python列......
  • 数据库三范式
    数据库规范化是使用一系列范式设计数据库(通常是关系型数据库)的过程,其目的是减少数据冗余,增强数据的一致性。这一系列范式就是指在设计关系型数据库时,需要遵从的不同的规范......
  • 在Python中,下划线代表着什么?
    前缀单下划线,如:_name某个方法或变量如果使用了此格式命名只是提醒开发者这并不是要组成公共接口的,对于普通的单文件内的变量或方法来说,并没有实际限制作用。但是用此格式......
  • python字符编码问题处理
    编码编码目的是让机器读懂语言在python中,Python接受的是str即使输入的数据是其它格式,在Python内部都会自动转为str编码集因为电脑是根据二进制工作的,所以将二进制......
  • 配置oracle数据库别名
    参考资料:https://blog.csdn.net/qq_39194322/article/details/127189004需要配置的文件名:tnsnames.ora文件路径:D:\oracle\product\10.2.0\db_1\network\ADMIN配置格式:#......
  • oracle数据库忘记用户名和密码
    一、Oracle忘记用户名和密码1、运行cmd.exe,输入命令sqlplus,进入oracle控制台      开始-->运行-->cmd      C:\Users\Administrator>s......
  • Python基本数据类型
    一、Number(数字)整型(int):通常被称为是整型或整数,是正或负整数,不带小数点。Python3整型是没有限制大小的,可以当作Long类型使用,所以Python3没有Python2的Long类型。......