Pymongo简单使用

Pymongo安装

直接使用pip安装即可

pip install pymongo

连接Mongodb

MongoClient()方式(官方建议的新方法)

MongoClient对象:用于与MongoDB服务器建立连接

myclient = pymongo.MongoClient("mongodb://localhost:27017/")

需要注意的是:从pymongo3.0版本开始,MongoClient的构造函数就不会再阻塞等待MongoDB连接的建立,即使连接不上也不会上报ConnectionFailure,用户提交的资格证书是错误的也不会上报ConfigurationError。相反,构造函数会立即返回并在后台线程中加载处理连接数据的进程。
也就是说,在使用pymongo时你需要确保自己的mongodb服务打开了,不然程序会在数据库的增删改操作中等待上相当长的时间。

Connection()方式(不建议使用)

connection = pymongo.Connection("192.168.1.2",27017)

MongoClient()和Connection()方法相差不大,最根本的区别在于Connection()方法的默认行为不同,connection()默认是瞬时完毕,不等server回应,而MongoClient()默认是安全操作,等server确认后才继续下一步操作。
正因为这点,所以Connection方法操作数据库要比MongoClient方法更快一些,但官方现在已经不推荐使用。

Pymongo添加文档

MongoDB 中的一个文档类似 SQL 表中的一条记录。

插入单条数据

集合中插入文档使用 insert_one() 方法,该方法的第一参数是键值对。
以下实例向 col 集合中插入文档:

x = mycol.insert_one({ "id": 1, "name": "valkyrie", "age": "20" })
print(x.inserted_id)

insert_one() 方法返回 InsertOneResult 对象,该对象包含 inserted_id 属性,它是插入文档的 id 值。

插入多条数据

集合中插入多个文档使用 insert_many() 方法,使用方法与insert_one一样。

x = mycol.insert_many([
{'id': 1, 'name': 'valkyrie', 'age': 20},
{'id': 1, 'name': 'wangiia', 'age': 16}
])

insert_many() 方法返回 InsertManyResult 对象,该对象包含 inserted_ids 属性,该属性保存着所有插入文档的 id 值。

Pymongo删除文档

删除单条数据

可以使用 delete_one() 方法来删除一个文档,该方法第一个参数为查询对象,指定要删除哪些数据。
下例删除 name 字段值为 “wangiia” 的数据:

mycol.delete_one({ "name": "wangiia" })

删除多条数据

使用 delete_many() 方法来删除多个文档,该方法第一个参数为查询对象,指定要删除哪些数据。
下例删除所有 name 字段中以 v 开头的文档:

x = mycol.delete_many( { "name": {"$regex": "^v"} })

删除所有数据

delete_many() 方法如果传入的是一个空的查询对象,则会删除集合中的所有文档:

x = mycol.delete_many({})

删除集合

用 drop() 方法来删除一个集合,下例删除了 mycol 集合:

mycol.drop()

如果删除成功 drop() 返回 true,如果删除失败(集合不存在)则返回 false。

Pymongo修改文档

单条数据修改

我们可以使用 update_one() 方法修改文档中的记录。该方法第一个参数为查询的条件,第二个参数为要修改的字段。若查找到的匹配数据多于一条,则只会修改第一条

mycol.update_one({ "name": "valkyrie" }, { "$set": { "age": "16" } })

注意:使用$set操作符修改特定属性的值,否则会修改整个文档。

多条数据修改

update_one() 方法只能修匹配到的第一条记录,如果要修改所有匹配到的记录,可以使用 update_many()。

x = mycol.update_many({ "name": "valkyrie" }, { "$set": { "age": "16" } })
print(x.modified_count)

update_many()方法返回 UpdateResult 对象,该对象包含 modified_count属性,它是更新文档数目的值。

Pymongo查询文档

查询单条数据

我们可以使用 find_one() 方法来查询集合中的一条数据

print(mycol.find_one())

查询所有数据

也可以使用 find()方法可以查询集合中的所有数据,类似 SQL 中的 SELECT * 操作

for x in mycol.find():
  print(x)

其中,查询方法find()返回的对象为Cursor对象,用于进行多行数据的遍历
当调用集合对象的find()方法时,会返回Cursor对象,结合for…in…遍历cursor对象。

查询指定字段数据

find()方法中可以指定查询指定字段的数据,将要返回的字段对应值设置为 1

for x in mycol.find({},{ "_id": 0, "name": 1, "age": 1 }):
  print(x)

需要注意的是:除了 _id 你不能在一个对象中同时指定 0 和 1,下面的例子会报错

for x in mycol.find({},{'name':0,'age':1}):
    print(x)

报错为

pymongo.errors.OperationFailure: Projection cannot have a mix of inclusion and exclusion.

查询指定条件数据

可以在 find() 中设置参数来过滤数据

mydata = mycol.find_one({ "name": "valkyrie" })
print(mydata)

mydata = mycol.find({ "name": "valkyrie" })
for x in mydata:
  print(x)

高级查询

查询的条件语句中,我们还可以使用修饰符。
以下实例用于读取age字段中大于18的数据,大于的修饰符条件为 {"$gt": 18} :

mydata = mycol.find({ "age": { "$gt": 18 } })
for x in mydata:
  print(x)

正则表达式查询

我们还可以使用正则表达式作为修饰符(只用于搜索字符串的字段)。
以下实例用于读取name字段中以v字母开头的数据,正则式修饰符条件为 {"$regex": “^v”}:

mydata = mycol.find({ "name": { "$regex": "^v" } })
for x in mydata:
  print(x)

查询指定条数数据

如果我们要对查询结果设置指定条数的记录可以使用 limit() 方法,参数为数字

myresult = mycol.find().limit(2)
for x in myresult:
  print(x)

Pymongo排序文档

sort() 方法可以指定升序或降序排序。第一个参数为要排序的字段,第二个字段指定排序规则,1 为升序,-1 为降序,默认为升序。

下例为以age字段对文档进行排序,排序规则为升序。

mydata = mycol.find().sort("age")

下例为以age字段对文档进行排序,排序规则为降序。

mydata = mycol.find().sort("age", -1)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值