千家信息网

初窥Python(一)——使用pymongo连接MongoDB

发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,Python 可以使用 pymongo 库方便的操作 MongoDB 。插播一句,MongoDB 不同于关系型结构的三层结构--database--> table --> record,它的层级为 d
千家信息网最后更新 2025年11月07日初窥Python(一)——使用pymongo连接MongoDB

Python 可以使用 pymongo 库方便的操作 MongoDB 。插播一句,MongoDB 不同于关系型结构的三层结构--database--> table --> record,它的层级为 database -->collection --> document 。这里不重点介绍 MongoDB 用法,主要来看一下如何用 Python 使用 MongoDB

1.安装MongoDBpymongo

[root@localhost ~]# pip install pymongo[root@localhost ~]# yum install -y mongodb-server

启动 MongoDB ,其中 --dbpath 指定数据存放目录,默认为 /data/db ,如果目录不存在会报错; --logpath 指定日志输出文件,日志会按照时间自动切分:

[root@localhost ~]# mongod --dbpath=/data/mongodb/db/--logpath=/data/mongodb/mongodb.log

注:如果没有 pip 命令,需要使用 yum 进行安装:

[root@localhost ~]# yum install -y python-pip

2.建立连接:

[root@localhost ~]# python
>>> from pymongo import *>>> client = MongoClient() //与以下两种方式等同>>> client = MongoClient("localhost", 27017)>>> client = MongoClient("mongodb://localhost:27017/")

3.指定将要进行操作的databasecollection

>>> db = client.test_db>>> collection = db.test_collection

4.常规操作:

4.1 插入:

>>> mydict = {"name":"Lucy", "sex":"female","job":"nurse"}>>> collection.insert(mydict)>>> collection.insert_one(mydict)>>> collection.insert_many(mydict) //会报错,.insert_many()时参数必须为 list 形式,做如下包装:>>> mylist = []>>> mylist.append(mydict)>>> collection.insert_many(mylist) //不会报错


4.2 查询:

.find_one() 显示满足条件的第一个 collectionfind() 的结果则是一个满足条件的对象数组:

>>> collection.find({"name":"Lucy"})[0]>>> collection.find({"name":"Lucy"})[1]……

可以使用 for-in 循环进行查看:

>>> for i in collection.find({"name":"Lucy"})…     print i…{u'job': u'nurse', u'_id': ObjectId('554bd2e1e1382306bba8ade9'),u'name': u'Lucy', u'sex': u'female'}{u'nationality': u'US', u'age': 24, u'_id': ObjectId('554be1cce138230714d0ab0d'),u'name': u'Lucy'}

查询指定条件的collection,可以指定一个或多个条件:

>>> collection.find_one({"name":"Lucy"})>>> collection.find_one({"name":"Lucy", "sex":"female"})

.count() 统计结果总条数:

>>> collection.find().count() //等同于collection.count()>>> collection.find({"name":"Lucy"}).count()

指定大于小于等于等条件进行查询:

>>> collection.find({"age": {"$lt": 30}})

这样的查询符号有 $lt(小于), $gt(大于), $lte(小于等于), $gte(大于等于), $ne(不等于),这与原生 MongoDB 中相同。

将查询结果按条件排序:

>>> collection.find().sort("age")  //默认,升序>>> collection.find().sort("age", pymongo.ASCENDING)   //升序>>> collection.find().sort("age", pymongo.DESCENDING)  //降序

查询 database中所有collection

>>> db.collection_names()>>> db.collection_names(include_system_collections=Flase) //不包括系统collection,一般指的是system.indexes

注:这里的 db 为建立连接后的db = client.test_db

4.3 更新:

>>> temp = collection.find_one({"name":"Lucy"})>>> temp2 = temp.copy()>>> temp["name"] = "Jordan">>> collection.save(temp)   //或 .update() ,注意参数形式>>> collection.update(temp, temp2)  //将temp更新为temp2

注:如果此时temp["_id"]在该collection中已经存在,则.save()为更新操作,与 .replace_one() 作用相同,否则 .save() 为插入操作,与 .insert_one() 作用相同。

还要注意的一点是,.replace_one()需要传入两个参数,分别为当前document和要更新为的 document ,与 .update() 相同(update和save的区别暂且略过,有兴趣可以搜索引擎一下)

>>> collection.replace_one(old_document, new_document)

4.4 删除:

>>> collection.remove(temp)//即便该temp不存在也不会报错>>> collection.delete_one(temp)>>> collection.delete_many(temp) //与 .insert_many() 不同,在temp不是list类型时也不会报错


补充:

1.JSON序列化与反序列化:

如果想序列化为标准 JSON 格式,两种方式,方式一json 包中的 dumps

>>> import json>>> for i in collection.find("{"name":"Lucy"})…     del i["_id"]    //不能直接转换,无法识别ObjectId…     json.dumps(i)

对应的反序列化方法为json.loads()

方式二bson.json_util包中封装的 dumps

>>> from bson import Binary, Code>>> from bson.json_util import dumps>>> dumps([{'foo': [1, 2]},...     {'bar': {'hello':'world'}},...     {'code': Code("function x() { return1; }")},...     {'bin': Binary("")}])'[{"foo": [1, 2]}, {"bar": {"hello":"world"}}, {"code": {"$code": "function x(){ return 1; }", "$scope": {}}}, {"bin":{"$binary": "", "$type": "00"}}]'

对应的反序列化方法为bson.json_util.loads()

2.Deprecated"Modern"

pymongo中,有一些方法虽然没有被弃用,但也已经不再建议使用,使用这些方法不会出现 error ,但会报出 warning

__main__:1:DeprecationWarning: insert is deprecated. Use insert_one or insert_manyinstead.

下面列出一些Deprecated Method "Mordern" Method ,供了解(建议不要使用 Deprecated Method,因为没准哪天就真的被弃用了):

Deprecated "Mordern"

insert insert_one insert_many

save replace_one insert_one

remove delete_one delete_many

update replace_one update_one update_many

参考资料:

http://api.mongodb.org/python/current/tutorial.html

http://api.mongodb.org/python/current/api/bson/json_util.html


条件 查询 序列 相同 方式 方法 更新 参数 结果 会报 作用 升序 建议 形式 日志 目录 结构 不同 两个 兴趣 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 黄浦区网络技术服务价格合理 海智网聚网络技术公司待遇 c语言用啥函数输入数据库 阅览证可以使用数据库资源吗 商丘网络安全公司 面向对象数据库多媒体应用 怎样确保公司网络安全 万方数据库机构登录账号 如何发表网络安全sci Nhanes数据库的死亡率 双线接入内网服务器路由 超级课程表数据库分析 软件开发岗位转行 传达网络安全工作会议精神 服务器访问权限开通英语 软件开发应用的总结 阿里巴巴软件开发工程师月薪 履行网络安全主体责任情况 桌面服务器和工作站服务器区别 应届嵌入式软件开发工程师 5g互联网大会华工科技 微软云数据库使用教程 数据库sql语句建表在哪看 内部软件开发简要文档 浪潮服务器进管理口 天下3都什么类型的服务器 标准件选型软件开发 三种数据库类型有哪些 网络搭建大赛和网络安全大赛 如何判断数据是否在数据库中
0