python连接MongoDB数据库方法及增删改查等操作小结。

Y9


  建议安装MongoDB可视化工具“Robo 3T”,可以很直观的看到对MongoDB操作后的数据。


1、‘Robo 3T’的安装,网上很多途径可下载,在此分享我使用的版本:
链接:https://pan.baidu.com/s/1EcjmUVkXz1GQeTXy2fMk9g
提取码:o1zd
① 数据库启动mongoDB后,打开Robo 3T连接mongodb数据库
在这里插入图片描述
② 保存,连接。就可出现以下类似界面:
相关教程推荐博客:https://blog.csdn.net/junshangshui/article/details/79371316
在这里插入图片描述

2、安装pymongo模块
在cmd管理员模式下,执行 pip install pymongo


3、用Pycharm连接MongoDB
① 导入模块:from pymongo import MongoClient
② 连接MongoDB数据库:db = MongoClient(‘192.168.47.128’,27017)
③ 添加数据库:my_db = db.my_db
④ 创建文件:my_infor = my_db.my_infor


4、增删改查以及条件查询等基础操作:

# 向文件中插入数据
user = [{'name':'jiesen','age':15,'sex':'男'},{'name':'jiesen','age':35,'sex':'男'},{'name':'jiesen','age':23,'sex':'男'}]
# my_infor.insert(user)
'''
insert():可以实现单条或多条数据的插入
save():只能完成单条数据的插入,并且数据必须是字典结构
'''

# 查询数据
res = my_infor.find({'name':'jiesen'})
# for item in res:
#     print(item)

# 更新数据
# multi: 布尔类型, 设置数据更新时是否一次性更新多条数据, 默认为False
# upsert: 设置数据更新时,如果数据不存在,是否将本次数据添加到文件中,默认为False
my_infor.update({'name':'jiesen1'},{'$set':{'age':20,'sex':'woman'}},multi=True,upsert=True)

# 删除数据
# delete_one(): 删除数据中一条数据
# delete_many(): 一次性删除多条满足的数据
# my_infor.delete_many({'name':'jiesen'})

# mongodb条件查询:
'''
> : $gt
< : $lt
>= : $gte
<= : $lte
$in:(m,n,) : 提取在指定内容中的数据

$all[n,m,...]: 查找数据库中某一条数据是否全部包含all中的数据, 如果'全部'包含则返回该条数据,否则不反悔

$push: 向已有数据源中按照字段进行数据的添加.基于'列表'

$pop: 将数据库中对应数据的某一个字段数据按照指定方式进行删除. 其中 -1:从列表的起始位置开始删除; 1: 从列表的最后位置开始删除

$pull: 将对应数据中指定的数据分布进行删除(按值删除)

$or : 或者指令, 该指令通常作为字典的键, 其对应的值是一个'列表'结构,列表中每一个元素之间是'并列'的关系.

"在字典中所有的键值对之间代表的是一种'并且'的关系."

.sort('age',1): 将查找之后的结果按照指定的字段进行排序, 1为升序,-1为降序

.skip(m).limit(n): 将查找结果的取值显示为,跳过m条数据,显示n条数据.  即只显示m+1~m+1+n的数据
'''
#例:
#查询年龄在[5,25]之间的所有数据
res = my_infor.find({
    'age':{'$gte':5,"$lte":25}
})
# for item in res:
#     print(item)

#查询年龄15以下或25以上,name是jiesen的数据
res1 = my_infor.find({
    '$or':[
        {'age':{'$gte':25}},
        {'age':{'$lte':15}}
    ],
    'name':'jiesen'
})


# $in: 提取在指定内容中的数据
res3 = my_infor.find({
    'age':{'$in':(15,23)}
})

obj = {
    'name':'ysh',
    'sex':'男',
    'age':77,
    'photo':['img/1.jpg','img/2.jpg'],
    'score':[12,15,17,90]
}
# my_infor.insert(obj)

res4 = my_infor.find({
    'score':{'$all':[12,15,90]}
})

# $push: 向已有数据源中按照字段进行数据的添加.基于'列表'
# my_infor.update(
#     {'name':'ysh'},   #指定数据的条件
#     {'$push':{'score':[103,120]}}
# )

# $pop: 将数据库中对应数据的某一个字段数据按照指定方式进行删除. 其中 -1:从列表的起始位置开始删除; 1: 从列表的最后位置开始删除
# $pull: 将对应数据中指定的数据分布进行删除(按值删除)
my_infor.update(
    {'name':'ysh'},
    # {'$pop':{'score':1}},
    {'$pull':{'score':90}}
)

#多路查询
res5 = my_infor.find({
    'score.0':{'$gt':10}
})

obj1 = {
    'name':'YSH',
    'son':[
        {'name':'ete','age':17},
        {'name':"ete1",'age':15}
    ]
}
# my_infor.insert(obj1)
res6 = my_infor.find({
    'son.1.age':15
})
for item in res6:
    print(item)

注意:以上注释部分有的是为避免例子之间冲突,而注释的执行语句。根据需要解除注释。


个人小结,定有不足之处,欢迎指点。
谢谢~

猜你喜欢

转载自blog.csdn.net/qq_43317529/article/details/83036351