Python3操作MongoDB简明教程:从连接到增删改查
本文详细介绍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()
以上即为本文的全部内容,希望对各位的学习有所帮助,也欢迎大家继续支持本站。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













