您现在的位置是:网站首页> 编程资料编程资料
利用Python操作MongoDB数据库的详细指南_python_
2023-05-26
410人已围观
简介 利用Python操作MongoDB数据库的详细指南_python_
前言
通常在项目中,一般都需要一种编程语言来操作数据库,使用Python来操作数据库有着天然的优势,因为Python的字典和MongoDB的文档几乎是一样的格式,本文讲介绍如何使用Python进行MongoDB操作
1 连接数据库
1.1 安装PyMongo
使用Python操作MongoDB需要使用一个第三方库——PyMongo。安装这个库与安装Python其他的第三方库一样,使用pip安装即可:
python3 -m pip install pymongo
也可以指定安装的版本:
python3 -m pip3 install pymongo==3.5.1
更新 pymongo 命令:
python3 -m pip3 install --upgrade pymongo
安装完成以后,打开Python交互环境,导入PyMongo。如果不报错(如图所示),则表示安装成功

1.2 连接数据库
要使用PyMongo操作MongoDB,首先需要初始化数据库连接。
(1)如果 MongoDB 就运行在本地电脑上,而且也没有修改端口或者添加用户名和密码,则初始化MongoClient的实例不需要带参数,直接写为以下格式:
import pymongo conn = pymongo.MongoClient()
(2)如果MongoDB运行在其他服务器上,则需要使用“URI(UniformResource Identifier,统一资源标志符)”来指定链接地址
import pymongo conn = pymongo.MongoClient('mongodb://test:12345@45.10.110.77:27019')MongoDB的URI格式如下:mongodb://用户名:密码@服务器IP或域名:端口例如:
(3)如果没有设置权限验证,则不需要用户名和密码,可写为
import pymongo conn = pymongo.MongoClient('mongodb://45.10.110.77:27019')1.3 连接库与集合
PyMongo连接库与集合有两种方式
- 方式1
连接数据库与集合的方法1
from pymongo import MongoClient conn = MongoClient() databae = conn.数据库名 collection = database.集合名
需要注意,在使用这种方式时,代码中的“数据库名”和“集合名”都不是变量名,它们直接就是库的名字和集合的名字。例如,要连接上example_data_1所在的集合,则Python代码如下:
from pymongo import MongoClient conn = MongoClient() database = conn.chapter_1 collection = database.example_data_1
- 方式2
连接数据库与集合方法2
from pymongo import MongoClient db_name = 'chapter_1' collection_name = 'example_data_1' conn = MongoClient() database = conn[db_name] collection = database[collection_name]
在使用这种方式时,在方括号中可以直接填变量来指定库名和集合名。当然,也可以直接填字符串,例如:
from pymongo import MongoClient conn = MongoClient() database = conn['chapter_1'] collection = database['example_data_1']
方式1 和方式2效果是完全相同的。大家可以任意选择一种自己喜欢的方式。
方式2主要用在需要批量操作数据库的情况下。例如在项目中,有时有多个测试环境,现在需要同时更新这些环境对应的数据库,则可以使用方式2。因为,这样可以将多个数据库的名字或者是多个集合的名字保存在列表中,然后再使用循环来进行操作,如下所示:
database_name_list = ['develop_env_alpha','develop_env_beta','develop_env_preflight'] for each_db in database_name_list: database = conn[each_db] collection = database.account collection.updateMany(.....)
其中第3行代码,在循环里面每次连接不同的库,这样写可以同时更新多个数据库的信息,对于同一个数据库里面的多个集合,也可以使用这个方法来操作。
注意: 在 MongoDB 中,集合只有在内容插入后才会创建! 就是说,创建集合(数据表)后要再插入一个文档(记录),集合才会真正创建。
2 MongoDB命令在Python中的对应方法
在获取到集合连接对象collection后,就可以用这个对象的各个方法来操作MongoDB了。
虽然 MongoDB 的命令和 collection 的方法名在写法上有微小的差异,但绝大多数的MongoDB语句的参数直接复制到Python代码中都可以使用。
MongoDB的命令使用的是驼峰命名法,而PyMongo使用的是“小写字母加下划线”的方式。它们的对比见下表:
| MongoDB命令 | PyMongo方法 |
|---|---|
| insertOne | insert_one |
| insertMany | insert_many |
| find | find |
| updateone | update_one |
| updateMany | update_many |
| deleteOne | delete_one |
| deleteMany | delete_many |
例如,Robo 3T执行的批量插入语句:
db.getCollection('example_data_1').insertMany([ {'name': '赵小三','age':20,'address':'北京'}, {'name': '钱小四','age':21,'address':'上海'}, {'name': '孙小五','age':20,'address':'山东'}, {'name': '李小六','age':23,'address':'河北'}, {'name': '欧阳小七','age':24,'address':'杭州'} ])使用Python批量插入数据,代码如下:
from pymongo import MongoClient conn = MongoClient() database = conn.chapter_1 collection = database.example_data_2 collection.insert_many([ {'name': '王小二','age':21,'student':True,'address':'广州'}, {'name': '赵小三','age':20,'student':True,'address':'北京'}, {'name': '钱小四','age':21,'student':True,'address':'上海'}, {'name': '孙小五','age':20,'student':True,'address':'山东'}, {'name': '李小六','age': None,'student':True,'address':'河北'}, {'name': '欧阳小七','age':24,'student':False,'address':'杭州'}, {'name': '公孙小八','age':25,'student':False,'address':'广州'} ])其中,第4行代码中使用了新的集合名字,用以区别。
使用Python操作MongoDB还有一个好处:如果当前使用的库或者集合不存在,则在调用了插入方法以后,PyMongo会自动创建对应的库或集合。
总之,绝大部分的操作,直接从Robo 3T中复制到Python中都可以运行,几乎不需要修改。
3 插入数据到MongoDB
基本语法
collection.insert_one(字典) # 插入一条数据 collection.insert_many(包含字典的列表) # 批量插入多条数据
被插入的数据格式
{'field_1': value_1, 'field_2': value_2} [ {'field_1': value_1, 'field_2': value_2}, {'field_1': value_3, 'field_2': value_4} ]说明
- MongoDB不需要提前创建数据库、不需要提前创建集合、不需要提取定义数据格式,想插入什么数据,直接插就行。
- 同一个集合的不同行数据,字典可以不一
举例
在Python中,将字典{‘name’: ’王小六’, ‘age’: 25, ‘work’: ’厨师’}插入到MongoDB中。
具体命令如下:
collection.insert_one({'name': '王小六', 'age': 25, 'work': '厨师'})提示:PyMongo还有一个通用方法——collection.insert()。
- 如果传入的是一个字典,则collection.insert()相当于insert_one
- 如果传入的是一个包含字典的集合,则collection.insert()相当于insert_many
但是PyMongo开发者准备移除它,因此不推荐读者在正式环境中使用这个方法。
4 从MongoDB中查询数据
查询一条数据
我们可以使用 find_one() 方法来查询集合中的一条数据,查询example_data_2 文档中的第一条数据:
from pymongo import MongoClient db_name = 'chapter_1' collection_name = 'example_data_1' conn = MongoClient() database = conn[db_name] collection = database[collection_name] x=collection.find_one({}) print(x)输出结果:

查询集合中所有数据
from pymongo import MongoClient db_name = 'chapter_1' collection_name = 'example_data_1' conn = MongoClient() database = conn[db_name] collection = database[collection_name] collection = database.example_data_2 rows = collection.find() for row in rows: print(row)
结果如下:

逻辑查询
collection.find({'字段名': {'基本符号': 边界值, '基本符号': 边界值}})在Python中,从MongoDB中查询所有“age”大于21小于25,并且“name”不等于“夏侯小七”的记录。
collection = database.example_data_2 rows = collection.find({'age':{'$lt':25,'$gt':21}, 'name':{'$ne':'公孙小八'}}) for row in rows: print(row)运行效果如图所示:

查询并对结果进行计数
collection.find().count()
查询并对结果进行计数
# 在Python中 collection.find().sort('字段名', 方向) # 在Robo 3T的命令输入区域 collection.find().sort({'字段名': 方向})其中方向为1提示:
本文由神整理自网络,如有侵权请联系本站删除!
本站声明:
1、本站所有资源均来源于互联网,不保证100%完整、不提供任何技术支持;
2、本站所发布的文章以及附件仅限用于学习和研究目的;不得将用于商业或者非法用途;否则由此产生的法律后果,本站概不负责!
相关内容
- 一篇文章彻底搞懂Python切片操作_python_
- python切片操作方法的实例总结_python_
- python可视化分析绘制散点图和边界气泡图_python_
- python+pytest自动化测试函数测试类测试方法的封装_python_
- python+pytest接口自动化参数关联_python_
- Python操作Redis数据库的超详细教程_python_
- python上下文管理器协议的实现_python_
- 使用Python轻松实现绘制词云图项目(附详细源码)_python_
- 解决Django cors跨域问题_python_
- Python pyecharts实时画图自定义可视化经纬度热力图_python_
