1



1.1 安装pymongo模块


pip install pymongo


不是吧,就这么简单?

是啊,所以说,要不要学点Python呢?


Python连接MongoDB

02



2.1 连接MongoDB


2.1.1 MongoDB运行在本机上

MongoDB运行在本机,且没有做任何配置(用兰州拉面的话来说,纯真)。

from pymongo import MongoClient
client1 = MongoClient()
print(client1)


Python操作MongoDB_java


2.1.2 MongoDB无权限认证

无权限认证就是不需要用户名密码,直接输入IP地址和端口就可以连接数据库。

from pymongo import MongoClient
client2 = MongoClient('mongodb://192.168.0.130:27017')
print(client2)


Python操作MongoDB_java_02


2.1.3 MongoDB需认证,且运行在其他机器上

在MongoDB中创建一个Python用户,专户管理本文数据。

1) 切换数据库到admin

Python操作MongoDB_java_03


2) 查看目前拥有的用户

Python操作MongoDB_java_04


3) 创建ipart的读写用户Python


4) Python用户测试连接

from pymongo import MongoClient
client3 = MongoClient('mongodb://python:123456@192.168.0.130:27017')
print(client3)



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)



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)



Python操作MongoDB

03



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)



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,我骄傲,好吧!

Python操作MongoDB_java_05


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)


Python操作MongoDB_java_06

如果对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)


Python操作MongoDB_java_07


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)


Python操作MongoDB_java_08


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)


Python操作MongoDB_java_09


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)


Python操作MongoDB_java_10


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)


Python操作MongoDB_java_11


注意细节

04



Python操作mongoDB进行增删改查和mongoDB增删改查,虽然有很多方面都是非常相似的,但是还是有一些小细节需要注意。

4.1 空值

1) MongoDB操作

db.getCollection('performer').find({'sex':null})


Python操作MongoDB_java_12


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)


Python操作MongoDB_java_13


4.2 布尔值

1) MongoDB操作

db.getCollection('performer').find({'human':false})


Python操作MongoDB_java_14


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)


Python操作MongoDB_java_15


4.3 排序

1) MongoDB操作

db.getCollection('performer').find().sort({'age':-1}).limit(3)


Python操作MongoDB_java_16


2)Python操作

# MongoDB sort,Python sort
rows_3 = collection.find({},{'_id':0}).sort('age',-1).limit(3)
for row in rows_3 :
    print(row)


Python操作MongoDB_java_17


4.4 查询_id列

1) MongoDB操作

db.getCollection('performer').find({'_id':ObjectId('5e513716cd21cd029f3600bb')})  


Python操作MongoDB_java_18


2)Python操作

from bson import ObjectId

rows_4 = collection.find({'_id':ObjectId('5e513716cd21cd029f3600bb')})  
for row in rows_4 :
    print(row)


Python操作MongoDB_java_19