Python 要链接 MongoDB 须要 MongoDB 驱动,这里咱们使用 PyMongo 驱动来链接。python
pip 是一个通用的 Python 包管理工具,提供了对 Python 包的查找、下载、安装、卸载的功能。正则表达式
安装 pymongomongodb
python3 -m pip3 install pymongo python3 -m pip3 install pymongo==3.5.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) # 数据库操做对象
集合中插入文档使用 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')]
MongoDB 中使用了 find 和 find_one 方法来查询集合中的数据,它相似于 SQL 中的 SELECT 语句。工具
咱们能够使用 find_one() 方法来查询集合中的一条数据。spa
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 * 操做。3d
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"}) # 查询符合条件的全部,生成器
查询的条件语句中,咱们还能够使用修饰符。code
如下实例用于读取 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))
在 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)
使用 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({})