![ca50376ea65352267c7a05f76f61009a.png](https://img-blog.csdnimg.cn/img_convert/ca50376ea65352267c7a05f76f61009a.png)
Hello,大家好!我是小安Sir,今天早上起床,我看到了床头的那本Python与MongoDB相关的书。
它在召唤我,Open 它,学习它,征服它!
那我就随了它的愿,顺便让更多人征服它,哈哈!
本文大纲
1. 安装pymongo模块
2. Python连接MongoDB
3. Python操作MongoDB
4. 注意细节
01 安装pymongo模块
1.1 安装pymongo模块
pip install pymongo
不是吧,就这么简单?
是啊,所以说,要不要学点Python呢?
02 Python连接MongoDB
2.1 连接MongoDB
2.1.1 MongoDB运行在本机上
MongoDB运行在本机,且没有做任何配置(用兰州拉面的话来说,纯真)。
from pymongo import MongoClient
client1 = MongoClient()
print(client1)
![73dd4351ff5e1d1f06dcfb0e615f1018.png](https://img-blog.csdnimg.cn/img_convert/73dd4351ff5e1d1f06dcfb0e615f1018.png)
2.1.2 MongoDB无权限认证
无权限认证就是不需要用户名密码,直接输入IP地址和端口就可以连接数据库。
from pymongo import MongoClient
client2 = MongoClient('mongodb://192.168.0.130:27017')
print(client2)
![d78e4ae1568b2187d18bad948879f1fe.png](https://img-blog.csdnimg.cn/img_convert/d78e4ae1568b2187d18bad948879f1fe.png)
2.1.3 MongoDB需认证,且运行在其他机器上
在MongoDB中创建一个Python用户,专户管理本文数据。
1) 切换数据库到admin
![280c4dcf4820bf1828bc059e4ed645cc.png](https://img-blog.csdnimg.cn/img_convert/280c4dcf4820bf1828bc059e4ed645cc.png)
2) 查看目前拥有的用户
![028b10d4aedf06ed6e838e9985a66a15.png](https://img-blog.csdnimg.cn/img_convert/028b10d4aedf06ed6e838e9985a66a15.png)
3) 创建ipart的读写用户Python
![2114d3e682a98e9935cab4cad1845d35.png](https://img-blog.csdnimg.cn/img_convert/2114d3e682a98e9935cab4cad1845d35.png)
4) Python用户测试连接
from pymongo import MongoClient
client3 = MongoClient('mongodb://python:123456@192.168.0.130:27017')
print(client3)
![b41a31ae48bba1278b645dda5758853b.png](https://img-blog.csdnimg.cn/img_convert/b41a31ae48bba1278b645dda5758853b.png)
2.2 指定MongoDB的数据库和表
2.2.1 点点点方式
from pymongo import MongoClient
client = MongoClient('mongodb://192.168.0.130:27017')
database = client.ipart
collection = database.performer
print(database)
print(collection)
![b68ea5d7830ecb577b43fca84220df0f.png](https://img-blog.csdnimg.cn/img_convert/b68ea5d7830ecb577b43fca84220df0f.png)
2.2.2 很明显的方式
from pymongo import MongoClient
client = MongoClient('mongodb://192.168.0.130:27017')
db_name = 'ipart'
collection_name = 'perform'
database = client[db_name]
collection = database[collection_name]
print(database)
print(collection)
![8bda6f28d4ce08e449ed8fceb87ce4a4.png](https://img-blog.csdnimg.cn/img_convert/8bda6f28d4ce08e449ed8fceb87ce4a4.png)
03 Python操作MongoDB
3.1 插入数据
3.1.1 Insert_one
插入一条数据。
collection.insert_one({'name':'小安','sex':'man','age':19,'job':'不自由学习者','story':'爱情公寓的隔壁','best_wishes':'不清楚'})
rows = collection.find()
print(rows)
print(type(rows))
print()
for row in rows :
print(row)
![4a5c51fdd497269414d71dc681fab766.png](https://img-blog.csdnimg.cn/img_convert/4a5c51fdd497269414d71dc681fab766.png)
3.1.2 insert_many
顾名思义,一下子插入N条数据。
data_list = [
{'name':'胡一菲','sex':'woman','age':23.5,'job':'弹一闪教师','story':'爱情公寓','best_wishes':'不清楚'},
{'name':'陈美嘉','sex':'woman','age':23,'job':'吕子乔的老婆','story':'爱情公寓','best_wishes':'不清楚'},
{'name':'唐悠悠','sex':'woman','age':22,'job':'专业演员','story':'爱情公寓','best_wishes':'不清楚'},
{'name':'林宛瑜','sex':'woman','age':20,'job':'林氏才女','story':'爱情公寓','best_wishes':'不清楚'},
{'name':'秦羽墨','sex':'woman','age':23,'job':'有钱人的追求者','story':'爱情公寓','best_wishes':'不清楚'},
{'name':'诸葛大力','sex':'woman','age':19,'job':'最强大脑','story':'爱情公寓','best_wishes':'不清楚'},
{'name':'咖喱酱','sex':'woman','age':19,'job':'吃货','story':'爱情公寓','best_wishes':'不清楚'},
{'name':'张大炮','sex':'man','age':25,'job':'二营长的大炮','story':'爱情公寓','best_wishes':'不清楚'},
{'name':'吕子乔','sex':'man','age':26,'job':'鼓励师','story':'爱情公寓','best_wishes':'不清楚'},
{'name':'曾小贤','sex':'man','age':27,'job':'电台主持人','story':'爱情公寓','best_wishes':'不清楚'},
{'name':'关谷神奇','sex':'man','age':27,'job':'漫画家','story':'爱情公寓','best_wishes':'不清楚'},
{'name':'白开','sex':'man','age':100,'job':'小黑','story':'爱情公寓','best_wishes':'不清楚'},
{'name':'陆展博','sex':'man','age':21,'job':'外星人','story':'爱情公寓','best_wishes':'不清楚'},
{'name':'张益达','sex':'man','age':29,'job':'倒霉的好人','story':'爱情公寓','best_wishes':'不清楚'},
{'name':'斯内克','sex':'man','age':99,'job':'','story':'爱情公寓','best_wishes':'不清楚'},
{'name':'赵海棠','sex':'man','age':22,'job':'大文豪','story':'爱情公寓','best_wishes':'不清楚'},
{'name':'张伟','sex':'man','age':26,'job':'律政先锋','story':'爱情公寓','best_wishes':'不清楚'},
{'name':'小则又沐风','sex':'woman','age':21,'job':'吕子乔的虚幻情人','story':'爱情公寓','best_wishes':'不清楚'},
{'name':'吕小布','sex':'man','age':25,'job':'僚机吕布','story':'爱情公寓','best_wishes':'不清楚'}
]
collection.insert_many(data_list)
rows_all = collection.find()
for row in rows_all:
print(row)
3.2 查询数据
查询数据,有find_one和find,一般使用find。
3.2.1 find_one
找出第一条数据咯,什么条件都不用加,这这这有卵用啊?我是高手高手高高手,我用find,我骄傲,好吧!
![789e0a6d970cb9261c179ff8c97124ae.png](https://img-blog.csdnimg.cn/img_convert/789e0a6d970cb9261c179ff8c97124ae.png)
3.2.2 find
举个栗子~
# 限定查询条件 --$lt 少于,$gt 大于,$ne 不等于
rows_select = collection.find({'age':{'$lte':25,'$gt':21},
'name':{'$ne':'张大炮'} } )
for row in rows_select:
print(row)
![959bc6403823571c69b13bf8c87ee6e4.png](https://img-blog.csdnimg.cn/img_convert/959bc6403823571c69b13bf8c87ee6e4.png)
如果对find的语法不是很熟悉,请点击下面推文链接。
MongoDB入门教程
3.3 更新数据
3.3.1 普通update_one
更新一条符合条件的数据,如果有多条数据符合,则从上往下开始更新,一次更新一条。
collection.update_one({'name':'张益达'},{'$set':{'age':100}})
rows_update1 = collection.find({'name':'张益达'})
for row in rows_update1:
print(row)
![c2c4d102c00b0a62fa3cf19e78766e4b.png](https://img-blog.csdnimg.cn/img_convert/c2c4d102c00b0a62fa3cf19e78766e4b.png)
3.3.2 另类update_one
有一种更新叫作没有该数据"我"就插入,有"我"就更新,怎么样,是不是很霸道!
# update_one & upsert
collection.update_one({'name':'蟑螂鼠'},{'$set':{'age':999,'story':'爱情公寓'}},upsert=True)
rows_update2 = collection.find({'age':{'$gt':100}})
for row in rows_update2:
print(row)
![a609b94502648818c34a603961bd3b57.png](https://img-blog.csdnimg.cn/img_convert/a609b94502648818c34a603961bd3b57.png)
3.3.3 update_many
一次性更新所有符合条件的数据。
# update_many
collection.update_many({'story':'爱情公寓'},{'$set':{'story':'爱情公寓1-5','best_wishes':'感谢陪伴,赞!'}})
rows_update3 = collection.find({}).limit(5)
for row in rows_update3:
print(row)
![d7ea8baf24e3a003c40bbdd7524e49d9.png](https://img-blog.csdnimg.cn/img_convert/d7ea8baf24e3a003c40bbdd7524e49d9.png)
3.4 删除数据
3.4.1 delete_one
删除一条符合条件的数据,如果有多条数据符合,则从上往下开始删除,一次删除一条。
# delete_one
collection.delete_one({'name':'小安'})
rows_delete1 = collection.find({'name':'小安'})
for row in rows_delete1:
print(row)
![52cb56d3520100b19a1e7fc1ed4a6fdd.png](https://img-blog.csdnimg.cn/img_convert/52cb56d3520100b19a1e7fc1ed4a6fdd.png)
3.4.2 delete_many
一次性删除所有符合条件(sex='man')的数据。
# delete_many
collection.delete_many({'sex':'man'})
rows_delete2 = collection.find({})
for row in rows_delete2:
print(row)
![8aea36efa9b98957f41f787403719e1a.png](https://img-blog.csdnimg.cn/img_convert/8aea36efa9b98957f41f787403719e1a.png)
04 注意细节
Python操作mongoDB进行增删改查和mongoDB增删改查,虽然有很多方面都是非常相似的,但是还是有一些小细节需要注意。
4.1 空值
1) MongoDB操作
db.getCollection('performer').find({'sex':null})
![50254d6cf81be71b607045bea7a0abc6.png](https://img-blog.csdnimg.cn/img_convert/50254d6cf81be71b607045bea7a0abc6.png)
2)Python操作
# MongoDB null,Python None
# rows_1 = collection.find({'sex':null}) ,此为错误代码
rows_1 = collection.find({'sex':None})
for row in rows_1:
print(row)
![519c23747547d884730c65a769be83a0.png](https://img-blog.csdnimg.cn/img_convert/519c23747547d884730c65a769be83a0.png)
4.2 布尔值
1) MongoDB操作
db.getCollection('performer').find({'human':false})
![11f36119093433780274effac7f75904.png](https://img-blog.csdnimg.cn/img_convert/11f36119093433780274effac7f75904.png)
2)Python操作
# MongoDB true/false,Python True/False
# collection.update_one({'name':'蟑螂鼠'},{'$set':{'human':False}})
rows_1 = collection.find({'human':False})
for row in rows_1:
print(row)
![93748bf0f72593a92d36fd696ba8ee39.png](https://img-blog.csdnimg.cn/img_convert/93748bf0f72593a92d36fd696ba8ee39.png)
4.3 排序
1) MongoDB操作
db.getCollection('performer').find().sort({'age':-1}).limit(3)
![3777df45f26c66a0a33b1a37b9c51532.png](https://img-blog.csdnimg.cn/img_convert/3777df45f26c66a0a33b1a37b9c51532.png)
2)Python操作
# MongoDB sort,Python sort
rows_3 = collection.find({},{'_id':0}).sort('age',-1).limit(3)
for row in rows_3 :
print(row)
![f8e083255a49ef689a687cf7e0033e47.png](https://img-blog.csdnimg.cn/img_convert/f8e083255a49ef689a687cf7e0033e47.png)
4.4 查询_id列
1) MongoDB操作
db.getCollection('performer').find({'_id':ObjectId('5e513716cd21cd029f3600bb')})
![b8caf02308da8e2e4a12659fbef9ef29.png](https://img-blog.csdnimg.cn/img_convert/b8caf02308da8e2e4a12659fbef9ef29.png)
2)Python操作
from bson import ObjectId
rows_4 = collection.find({'_id':ObjectId('5e513716cd21cd029f3600bb')})
for row in rows_4 :
print(row)
![28910cb6732aca59b274a3637a58b54a.png](https://img-blog.csdnimg.cn/img_convert/28910cb6732aca59b274a3637a58b54a.png)
看起来就这事回事,共通的代码很多嘛!
的确如此!用python融会贯通各语言,就是牛!
往期回顾
Python切割文件教程一 | 我的“大马士革命刀"
Python切割文件教程二 | 我的“大马士革命刀"不Like补刀
Django博客教程一 | Django架构介绍
Django博客教程二 | Django入门版博客
Django博客教程三 | Django进阶版博客数据篇
Django博客教程四 | Django进阶版博客网页篇
能打码吗?
![9ec99a30d9a8856bff9c893e165a3f78.png](https://img-blog.csdnimg.cn/img_convert/9ec99a30d9a8856bff9c893e165a3f78.png)