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

Stella981
• 阅读 678

一、pymongodb的安装

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

pip安装

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

安装 pymongo

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

二、pymongodb操作mongodb数据库

1.连接数据库

通过pymongo连接mongodb数据库

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

2.文档的增加

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

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

3.查询文档

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

查询一条数据

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

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

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

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

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

高级查询

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

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

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

正则表达式查询

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

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

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

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

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

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

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

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

4.修改文档

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

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

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

5.删除数据

删除单挑

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

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

删除多条

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

import pymongo
​
client = pymongo.MongoClient("127.0.0.1", 27017)
db = client["practice"] 
​
query = { "name": {"$regex": "^F"} }
del_res = db.stu.delete_many(myquery)  # 删除满足条件的多条
print(del_res.deleted_count)
​
# 删除所有
del_res = db.stu.delete_many({})
点赞
收藏
评论区
推荐文章
blmius blmius
1年前
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
刚刚好 刚刚好
5个月前
css问题
1、在IOS中图片不显示(给图片加了圆角或者img没有父级)<div<imgsrc""/</divdiv{width:20px;height:20px;borderradius:20px;overflow:h
晴空闲云 晴空闲云
5个月前
css中box-sizing解放盒子实际宽高计算
我们知道传统的盒子模型,如果增加内边距padding和边框border,那么会撑大整个盒子,造成盒子的宽度不好计算,在实务中特别不方便。boxsizing可以设置盒模型的方式,可以很好的设置固定宽高的盒模型。盒子宽高计算假如我们设置如下盒子:宽度和高度均为200px,那么这会这个盒子实际的宽高就都是200px。但是当我们设置这个盒子的边框和内间距的时候,那
艾木酱 艾木酱
5个月前
快速入门|使用MemFire Cloud构建React Native应用程序
MemFireCloud是一款提供云数据库,用户可以创建云数据库,并对数据库进行管理,还可以对数据库进行备份操作。它还提供后端即服务,用户可以在1分钟内新建一个应用,使用自动生成的API和SDK,访问云数据库、对象存储、用户认证与授权等功能,可专
Stella981 Stella981
1年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Wesley13 Wesley13
1年前
cobol学习之十数据库的增删改查模板
这次连接数据库使用的是ODBC连接access数据库,里面主要是一个增删改查的模板备份,方便以后查询。000001IDENTIFICATIONDIVISION.000002PROGRAMID.SAMPLEDB2.00
Stella981 Stella981
1年前
Python操作MongoDB代码示例
1importpymongopipinstallpymongo安装python操作mongodb的模块2myclientpymongo.MongoClient(host'127.0.0.1',port27017)指定主机和端口号创建客户端34dblistmyclient
Easter79 Easter79
1年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
1年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
helloworld_28799839 helloworld_28799839
5个月前
常用知识整理
Javascript判断对象是否为空jsObject.keys(myObject).length0经常使用的三元运算我们经常遇到处理表格列状态字段如status的时候可以用到vue