一、目标
使用pymongo模块,对MongoDB进行增加、删除、查、修改数据。
二、试验平台
windows7 , python3.7, mongodb4.0.6, pymongo3.7.2
用到的模块pymysql,如果没有的话,就pip安装pymongo
三、让python3.7连接mongodb。(这是主要代码,下面一个示例是完整代码)
from pymongo import MongoClient
# #连接服务器,127.0.0.1指的是本机ip, 27017指的是mongoDB端口,默认的就是27017
conn = MongoClient("127.0.0.1", 27017)
# #连接数据库
db = conn.xmongodb
# #获取集合
collection = db.student
四、利用pymongo向MongoDB中插入一条数据。完整代码如下:
注意,貌似python3.5或者更早版本,插入语句要用collection.insert(),而非现在的collection.insert_one(),
报错提示:DeprecationWarning: insert is deprecated. Use insert_one or insert_many instead.
还有,在mongodb的CLI工具下插入数据是,键是无需加双引号的,而在python中,键貌似得加双引号。
from pymongo import MongoClient
# #连接服务器,127.0.0.1指的是本机ip, 27017指的是mongoDB端口,默认的就是27017
conn = MongoClient("127.0.0.1", 27017)
# #连接数据库
db = conn.xmongodb
# #获取集合
collection = db.student
# #添加文档
collection.insert_one({"name": "笑笑2", "age": 5, "gender": 0, "address": "静安", "isDelete": 0})
# #断开连接
conn.close()
五、插入多条数据。完整代码如下:
from pymongo import MongoClient
# #连接服务器,127.0.0.1指的是本机ip, 27017指的是mongoDB端口,默认的就是27017
conn = MongoClient("127.0.0.1", 27017)
# #连接数据库
db = conn.xmongodb
# #获取集合
collection = db.student
# #添加文档
collection.insert_many([{"name": "笑笑3", "age": 18, "gender": 0, "address": "西安", "isDelete": 0},
{"name": "笑笑5", "age": 19, "gender": 0, "address": "福建", "isDelete": 0},
{"name": "笑笑6", "age": 20, "gender": 0, "address": "洛阳", "isDelete": 0}])
# #断开连接
conn.close()
六、查询数据。完整代码如下:
from pymongo import MongoClient
# #连接服务器,127.0.0.1指的是本机ip, 27017指的是mongoDB端口,默认的就是27017
conn = MongoClient("127.0.0.1", 27017)
# #连接数据库
db = conn.xmongodb
# #获取集合
collection = db.student
# result = collection.find() # #查询所有文档
# #查询部分文档
result = collection.find({"age": {"$gt": 30}})
for row in result:
print(row)
# #查询年龄大于30的有多少个
result2 = collection.count_documents({"age": {"$gt": 30}})
print("有{0}个符合条件的".format(result2))
# #断开连接
conn.close()
结果如下:
七、根据ID查询 (要另引入模块),完整代码如下:
from pymongo import MongoClient
from bson.objectid import ObjectId # #这玩意用于mongodb的根据ID查询
# #连接服务器,127.0.0.1指的是本机ip, 27017指的是mongoDB端口,默认的就是27017
conn = MongoClient("127.0.0.1", 27017)
# #连接数据库
db = conn.xmongodb
# #获取集合
collection = db.student
# #根据ID查询
result = collection.find({"_id": ObjectId("5c8a56e1759918e581de2311")})
print(result)
print(result[0])
# #断开连接
conn.close()
输出结果如下:
{'_id': ObjectId('5c8a56e1759918e581de2311'), 'name': '徐子欣', 'age': 3.0, 'gender': 1.0, 'address': '天津南开区', 'isDelete': 0.0}
八、升序排列,完整代码如下:
from pymongo import MongoClient
# #连接服务器,127.0.0.1指的是本机ip, 27017指的是mongoDB端口,默认的就是27017
conn = MongoClient("127.0.0.1", 27017)
# #连接数据库
db = conn.xmongodb
# #获取集合
collection = db.student
result = collection.find().sort("age") # #查询所有文档,按照年龄age升序排列显示
for row in result:
print(row)
# #断开连接
conn.close()
九、降序排列
注意要另导入pymongo模块,完整代码如下:
from pymongo import MongoClient
import pymongo
# #连接服务器,127.0.0.1指的是本机ip, 27017指的是mongoDB端口,默认的就是27017
conn = MongoClient("127.0.0.1", 27017)
# #连接数据库
db = conn.xmongodb
# #获取集合
collection = db.student
# result = collection.find().sort("age") # #按照年龄age升序排列显示。
# #查询所有文档,按照年龄age降序排列显示
result = collection.find().sort("age", pymongo.DESCENDING)
for row in result:
print(row)
# #断开连接
conn.close()
十、分页查询
越过几条,显示几条。完整代码如下:
from pymongo import MongoClient
# #连接服务器,127.0.0.1指的是本机ip, 27017指的是mongoDB端口,默认的就是27017
conn = MongoClient("127.0.0.1", 27017)
# #连接数据库
db = conn.xmongodb
# #获取集合
collection = db.student
# #分页显示
result = collection.find().skip(2).limit(3) # #越过2条,选3条
for row in result:
print(row)
# #断开连接
conn.close()
十一、更新一条数据
完整代码如下:
from pymongo import MongoClient
# #连接服务器,127.0.0.1指的是本机ip, 27017指的是mongoDB端口,默认的就是27017
conn = MongoClient("127.0.0.1", 27017)
# #连接数据库
db = conn.xmongodb
# #获取集合
collection = db.student
# #更新数据
result2 = collection.update_one({"name": "笑笑6"}, {"$set": {"address": "安阳"}})
print(result2)
'''
将名字叫“笑笑6”的那条数据的,地址address更改成“安阳”
'''
# #断开连接
conn.close()
十二、删除一条数据
完整代码如下:
注意,只要delete_one函数中的条件,无论键还是值写错,或者根本键值都不存在,python都不会报错。
强烈建议加条件,否则会将整个集合(表)都删除掉了。
from pymongo import MongoClient
# #连接服务器,127.0.0.1指的是本机ip, 27017指的是mongoDB端口,默认的就是27017
conn = MongoClient("127.0.0.1", 27017)
# #连接数据库
db = conn.xmongodb
# #获取集合
collection = db.student
# #删除一条数据
collection.delete_one({"name": "kahn"}) # #删除一条数据,条件是name=“kahn”的
# #断开连接
conn.close()
测试ok。
是我的飞行时间。
2019年3月14日23:01:39