Python3操作MongoDB简明教程:从连接到增删改查

周叙
周叙
发布时间:2026-10-13| 6人浏览过
原创

本文详细介绍Python3环境下使用PyMongo库操作MongoDB数据库的完整流程。内容涵盖数据库连接方式、自动创建机制、单条与批量数据插入、单条及多条件查询、结果排序、数据更新与删除操作。通过具体代码示例,帮助开发者快速掌握MongoDB在Python中的核心应用技巧。

连接数据库

建立数据库连接只需指定服务器地址及端口即可。首先需要在代码中导入相应的库文件。

from pymongo import MongoClient
conn = MongoClient('localhost',27017)

此外,还可以采用以下连接写法:

conn = MongoClient('mongodb://localhost:27017/')

创建数据库

MongoDB具有自动创建数据库的特性,无需预先手动建立。当引用一个不存在的数据库名称时,系统会自动生成该数据库。

db = conn.testdb

执行上述代码后,会生成名为testdb的数据库。需要注意的是,在该数据库中未插入任何文档之前,它在常规管理工具中是不可见的,不会显示在列表里。

插入数据

接下来,我们先尝试插入一条数据作为示例。

单条记录插入

from pymongo import MongoClient
conn = MongoClient('mongodb://localhost:27017/')
db = conn.testdb
db.col.insert({"name":'yanying','province':'江苏','age':25})

注意:后续示例中省略了数据库连接步骤,仅展示核心代码,实际使用时请确保已建立连接。

若Python控制台未报错或输出异常信息,即表示插入成功。通过数据库管理工具查看,可以确认该数据库中已包含一条新数据。

多条记录插入

MongoDB支持一次性插入多条数据记录。

db.col.insert([
 {"name":'yanying','province':'江苏','age':25},
 {"name":'张三','province':'浙江','age':24},
 {"name":'张三1','province':'浙江1','age':25},
 {"name":'张三2','province':'浙江2','age':26},
 {"name":'张三3','province':'浙江3','age':28},
])

查询数据

下面演示如何检索刚才插入的数据。

单条查询

可以使用find_one()方法来获取单条记录。

db.col.find_one()

上述语句将返回一条MongoDB记录。注意,返回结果中多出的_id字段是MongoDB自动生成的唯一标识符。

复制代码 代码如下:

{'_id': ObjectId('5925351ad92fac3250b9ae3f'), 'name': 'yanying', 'province': '江苏', 'age': 25}

为了便于后续演示,我们再插入一些测试数据。(此处省略中间步骤)

查询所有

若需查询集合中的所有记录,可使用db.col.find()方法,但该方法返回的是一个结果游标(资源集)。

可以通过for循环遍历该游标以列出所有记录。

for item in db.col.find():
 print(item)

这样即可获取集合中的所有数据记录。

{'_id': ObjectId('5925351ad92fac3250b9ae3f'), 'name': 'yanying', 'province': '江苏', 'age': 25}
{'_id': ObjectId('592550e5d92fac0b8c449f87'), 'name': 'zhangsan', 'province': '北京', 'age': 29}
{'_id': ObjectId('592550f6d92fac3548c20b1a'), 'name': 'lisi', 'province': '上海', 'age': 22}
{'_id': ObjectId('59255118d92fac43dcb1999a'), 'name': '王二麻', 'province': '广东', 'age': 30}

条件查询

只需将查询条件作为参数传入,即可筛选出符合条件的数据。

for item in db.col.find({'name':"yanying"}):
 print(item)

查询结果

复制代码 代码如下:

{'_id': ObjectId('5925351ad92fac3250b9ae3f'), 'name': 'yanying', 'province': '江苏', 'age': 25}

同样可以查询年龄小于特定值的记录。

for item in db.col.find({"age":{"$lt":25}}):
 print(item)

或者查询年龄大于特定值的记录。

for item in db.col.find({"age":{"$gt":25}}):
 print(item)

统计查询

上述代码可用于统计集合中所有记录的总数。

db.col.find().count() // 4

也可以结合条件进行统计。

db.col.find({"age":{"$gt":25}}).count() //2

根据_id查询记录

_id是MongoDB自动生成的ID,其类型为ObjectId。若要通过该字段查询,需先进行类型转换。

Python3提供了相应的转换方法,但需要导入特定的库。

from bson.objectid import ObjectId

完成导入后,即可直接使用_id进行精确查询。

collection.find_one({'_id':ObjectId('592550e5d92fac0b8c449f87')})

结果排序

只需在sort方法中指定排序字段即可,MongoDB默认按升序排列。

db.col.find().sort("age")

可以通过添加参数来改变排序方式,例如设置为倒序。注意使用前需确保已导入pymongo库。

import pymongo
db.col.find().sort("UserName",pymongo.DESCENDING)

也可以显式指定升序排列,尽管这并非必须,因为默认即为升序。

for item in db.col.find().sort('age',pymongo.ASCENDING):
 print(item)

更新数据

更新数据操作相对简单,仅需提供匹配条件和需要更新的数据内容。

复制代码 代码如下:

db.col.update({'_id':ObjectId('59255118d92fac43dcb1999a')},{'$set':{'name':'王二麻33333'}})

执行结果如下:原name字段值“王二麻”已更新为“王二麻33333”。

复制代码 代码如下:

{'_id': ObjectId('59255118d92fac43dcb1999a'), 'name': '王二麻33333', 'province': '广东', 'age': 30}

删除数据

删除数据使用remove()方法。若该方法带有查询条件,则仅删除符合该条件的数据;若不带条件,则删除集合中的所有数据。

示例为删除name字段值为“王二麻33333”的用户记录。

db.col.remove({'name':'王二麻33333'})

删除全部数据(慎用)

db.col.remove()

以上即为本文的全部内容,希望对各位的学习有所帮助,也欢迎大家继续支持本站。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。