MongoDB学习【四】—pymongo操作mongodb数据库

一、pymongodb的安装

Python 要连接 MongoDB 需要 MongoDB 驱动,这里我们使用 PyMongo 驱动来连接。

pip安装

pip 是一个通用的 Python 包管理工具,提供了对 Python 包的查找、下载、安装、卸载的功能。

安装 pymongo

1python3 -m pip3 install pymongo 2python3 -m pip3 install pymongo==3.5.1 # 指定版本安装

二、pymongodb操作mongodb数据库

1.连接数据库

通过pymongo连接mongodb数据库

1import pymongo 2client = pymongo.MongoClient("127.0.0.1", 27017) 3dblist = client.database_names() # 显示服务器上的所有数据库 4# 新版本写法 5dblist = client.list_database_names() 6​ 7db = client["practice"] # 连接数据库,获取库,如果库名存在,则使用,不存在创建 8# print(db) # 数据库操作对象

2.文档的增加

集合中插入文档使用 insert_one() 方法,该方法的第一参数是字典 name => value 对。

1import pymongo 2​ 3client = pymongo.MongoClient("127.0.0.1", 27017) 4db = client["practice"] # 连接数据库,获取库,如果库名存在,则使用,不存在创建 5# print(db) # 数据库操作对象 6​ 7"""增加""" 8# 增加单条 9mydict = {"name":"ryxiong","age":99} 10res = db.stu.insert_one(mydict) 11print(res.inserted_id) # 5d2ed8f865d6b8f1c494ff78 ObjectId对象,不是字符串 12​ 13# 增加多条 14mylist = [{"name":"black"},{"name":"white"}] 15res = db.stu.insert_many(mylist) 16print(res.inserted_ids) # [ObjectId('5d2fcc93c4f3d6ecb7178c87'), ObjectId('5d2fcc93c4f3d6ecb7178c88')]

3.查询文档

MongoDB 中使用了 find 和 find_one 方法来查询集合中的数据,它类似于 SQL 中的 SELECT 语句。

查询一条数据

我们可以使用 find_one() 方法来查询集合中的一条数据。

1import pymongo 2from bson import ObjectId 3​ 4client = pymongo.MongoClient("127.0.0.1", 27017) 5db = client["practice"] # 连接数据库,获取库,如果库名存在,则使用,不存在创建 6​ 7res1 = db.stu.find_one({"name": "ryxiong"}) 8res2 = db.stu.find_one({"_id": ObjectId("5d2f0a052a8ee222edddb297")}) # 将字符串的ObjectID转为对象后查询

查询集合中的所有数据或多条

find() 方法可以查询集合中的所有数据,类似 SQL 中的 SELECT * 操作。

1import pymongo 2from bson import ObjectId 3​ 4client = pymongo.MongoClient("127.0.0.1", 27017) 5db = client["practice"] # 连接数据库,获取库,如果库名存在,则使用,不存在创建 6​ 7# 查询多个 8res3 = db.stu.find({}) # 查询所有记录 9res4 = db.stu.find({"name": "ryxiong"}) # 查询符合条件的所有,生成器

高级查询

查询的条件语句中,我们还可以使用修饰符。

以下实例用于读取 name 字段中第一个字母 ASCII 值大于 "H" 的数据,大于的修饰符条件为 {"$gt": "H"}

1import pymongo 2​ 3client = pymongo.MongoClient("127.0.0.1", 27017) 4db = client["practice"] # 连接数据库,获取库,如果库名存在,则使用,不存在创建 5​ 6myquery = { "name": { "$gt": "H" } } 7res = mycol.find(myquery)

正则表达式查询

我们还可以使用正则表达式作为修饰符。

正则表达式修饰符只用于搜索字符串的字段。

以下实例用于读取 name 字段中第一个字母为 "R" 的数据,正则表达式修饰符条件为 {"$regex": "^R"}

1import pymongo 2​ 3client = pymongo.MongoClient("127.0.0.1", 27017) 4db = client["practice"] # 连接数据库,获取库,如果库名存在,则使用,不存在创建 5​ 6myquery = { "name": { "$regex": "^R" } } 7mydoc = mycol.find(myquery) 8for x in mydoc: 9 print(x)

查询结果排序,跳过,截取条数

如果我们要对查询结果设置指定条数的记录可以使用 limit() 方法

对结果排序通过sort()方法,对结果忽略某些结果用skip

1import pymongo 2​ 3client = pymongo.MongoClient("127.0.0.1", 27017) 4db = client["practice"] # 连接数据库,获取库,如果库名存在,则使用,不存在创建 5​ 6# 1.查询结果的排序,跳过,和截取 7sort_res = list(db.stu.find().sort("age", pymongo.DESCENDING)) # 查询所有结果,并根据年龄的降序排序 8skip_res = list(db.stu.find().skip(2)) # 查询所有结果,并过滤掉前两条 9limit_res = list(db.stu.find().limit(2)) # 查询所有结果,并截取前两条显示 10​ 11# 2.分页效果 12pagination_res = list(db.stu.find().sort("age", pymongo.ASCENDING).limit(2).skip(2))

4.修改文档

在 MongoDB 中使用 update_one() 方法修改文档中的记录。该方法第一个参数为查询的条件,第二个参数为要修改的字段。

如果查找到的匹配数据多余一条,则只会修改第一条。

1import pymongo 2​ 3client = pymongo.MongoClient("127.0.0.1", 27017) 4db = client["practice"] # 连接数据库,获取库,如果库名存在,则使用,不存在创建 5​ 6"""修改""" 7# 方式一 8# 查询到直接更新设置值 9res = db.stu.update_one({"name":"ryxiong"},{"$set":{"age":222}}) 10print(res.modified_count) 11​ 12# 方式二.1 13# 查到记录,在字典中添加值 14res = db.stu.find_one({"name":"ryxiong"}) 15res["gender"] = "male" 16res["hobby"] = "photography" 17res["name"] = "ryxiong1" 18# 将值更新到记录中去 19res = db.stu.update_one({"name":"ryxiong"},{"$set":res}) 20print(res.modified_count)

5.删除数据

删除单挑

使用 delete_one() 方法来删除一个文档,该方法第一个参数为查询对象,指定要删除哪些数据

1import pymongo 2​ 3client = pymongo.MongoClient("127.0.0.1", 27017) 4db = client["practice"] 5​ 6del_res1 = db.stu.delete_one({"name": "ryxiong"}) # 删除满足条件的结果中的第一条 7print(del_res1.deleted_count)

删除多条

使用 delete_many() 方法来删除多个文档,该方法第一个参数为查询对象,指定要删除哪些数据。

1import pymongo 2​ 3client = pymongo.MongoClient("127.0.0.1", 27017) 4db = client["practice"] 5​ 6query = { "name": {"$regex": "^F"} } 7del_res = db.stu.delete_many(myquery) # 删除满足条件的多条 8print(del_res.deleted_count) 9​ 10# 删除所有 11del_res = db.stu.delete_many({})
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

Python3:sqlalchemy对mysql数据库操作,非sql语句

Python3:sqlalchemy对mysql数据库操作,非sql语句python3authorlizmdatetime2018020110:00:00coding:utf8'''

MongoDB学习【四】—pymongo操作mongodb数据库 - HelloWorld