pymongo学习笔记

MongoDB基本概念

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TvXoHW0X-1573371515181)(images/image-20191110140602039.png)]
在这里插入图片描述

连接数据库

#########  方法一  ##########
import pymongo
# MongoClient()返回一个mongodb的连接对象client
client = pymongo.MongoClient(host="localhost",port=27017)

#########  方法二  ##########
import pymongo
# MongoClient的第一个参数host还可以直接传MongoDB的连接字符串,以mongodb开头
client = pymongo.MongoClient(host="mongodb://127.0.0.1:27017/")

创建/指定数据库

######  方法一  ######
# 指定test数据库
db = client.test

######  方法二  ######
# 指定test数据库(调用client的test属性即可返回test数据库)
db = client["test"]

查看数据库

client.list_database_names()

['local', 'test', 'admin', 'medical']

指定/插入集合

######  方法一  ######
# 指定student集合
collection = db.student

######  方法二  ######
# 指定student集合
collection = db["student"]

增:插入文档/数据

pymongo 3.x版本中,insert()方法官方已不推荐使用,推荐使用**insert_one()insert_many()**将插入单条和多条记录分开。

  • db.collection.insert_one()
    用于插入单条记录,返回的是InsertOneResult对象
student = {
 'name': 'Jordan',
 'age': 18,
 'gender': 'man'
}

result = collection.insert_one(student)
# insert_one()返回的是InsertOneResult对象,我们可以调用其inserted_id属性获取_id。
print(result)  # <pymongo.results.InsertOneResult object at 0x10d68b558>
print(result.inserted_id) # 5932ab0f15c2606f0c1cf6c5
  • db.collection.insert_many()
    用于插入多条记录,返回的是InsertManyResult对象

student1 = {
 'name': 'Jordan',
 'age': 10,
 'gender': 'man'
}

student2 = {
 'name': 'Mike',
 'age': 11,
 'gender': 'man'
}

result = collection.insert_many([student1, student2])
# insert_many()方法返回的类型是InsertManyResult,调用inserted_ids属性可以获取插入数据的_id列表
print(result)  # <pymongo.results.InsertManyResult object at 0x101dea558>
print(result.inserted_ids) # [ObjectId('5932abf415c2607083d3b2ac'), ObjectId('5932abf415c2607083d3b2ad')]

查 : 查询数据

查找全部数据 find()

collection.find() #<pymongo.cursor.Cursor at 0x7fdc2bf4ac50>  返回一个对象

for i in collection.find():
    print (i)
    
#{'_id': ObjectId('5dc7a74df971b26b5833f454'), 'name': 'Jordan', 'age': 18, 'gender': 'man'}
#{'_id': ObjectId('5dc7a808f971b26b5833f455'), 'name': 'Jordan', 'age': 10, 'gender': 'man'}
#{'_id': ObjectId('5dc7a808f971b26b5833f456'), 'name': 'Mike', 'age': 11, 'gender': 'man'}

results = collection.find({"age":18})
print(results) # <pymongo.cursor.Cursor object at 0x1032d5128>
for result in results:
      print(result)
        
# <pymongo.cursor.Cursor object at 0x7fdc28a2ac50>
#{'_id': ObjectId('5dc7a74df971b26b5833f454'), 'name': 'Jordan', 'age': 18, 'gender': 'man'}        

查询单个数据 find_one()

collection.find_one({'name':'Mike'})

# 结果
{'_id': ObjectId('5dc7a808f971b26b5833f456'),
 'name': 'Mike',
 'age': 11,
 'gender': 'man'}

查询条件

在这里插入图片描述
在这里插入图片描述

# age大于10岁的 
for i in collection.find({'age':{'$gt':10}}):
    print (i)
#{'_id': ObjectId('5dc7a74df971b26b5833f454'), 'name': 'Jordan', 'age': 18, 'gender': 'man'}
#{'_id': ObjectId('5dc7a808f971b26b5833f456'), 'name': 'Mike', 'age': 11, 'gender': 'man'}

# 注意 $get 上要加引号

多条件查询

多条件查询 $and $or

## and查询
res = collection.find({'age':{'$gt':10}} , {'gender' : 'man'})
for i in res:
    print (i)
    #{'_id': ObjectId('5dc7a74df971b26b5833f454'), 'gender': 'man'}
	#{'_id': ObjectId('5dc7a808f971b26b5833f456'), 'gender': 'man'}
    
## or查询
res = collection.find({
    '$or':[{'age':{'$gt':10}} , {'gender' : 'man'}]
})
for i in res:
    print (i)
#{'_id': ObjectId('5dc7a74df971b26b5833f454'), 'name': 'Jordan', 'age': 18, 'gender': 'man'}
#{'_id': ObjectId('5dc7a808f971b26b5833f455'), 'name': 'Jordan', 'age': 10, 'gender': 'man'}
#{'_id': ObjectId('5dc7a808f971b26b5833f456'), 'name': 'Mike', 'age': 11, 'gender': 'man'}

获取文档个数 count()

collection.find().count()

3

排序 sort()

排序 sort()
调用sort方法,传入要排序的字段and升降序标志即可

# 默认升序
res = collection.find().sort('age',pymongo.ASCENDING)
for i in res:
    print (i)
#{'_id': ObjectId('5dc7a808f971b26b5833f455'), 'name': 'Jordan', 'age': 10, 'gender': 'man'}
#{'_id': ObjectId('5dc7a808f971b26b5833f456'), 'name': 'Mike', 'age': 11, 'gender': 'man'}
#{'_id': ObjectId('5dc7a74df971b26b5833f454'), 'name': 'Jordan', 'age': 18, 'gender': 'man'}


# 降序
res = collection.find().sort('age',pymongo.DESCENDING)
for i in res:
    print (i)
#{'_id': ObjectId('5dc7a74df971b26b5833f454'), 'name': 'Jordan', 'age': 18, 'gender': 'man'}
#{'_id': ObjectId('5dc7a808f971b26b5833f456'), 'name': 'Mike', 'age': 11, 'gender': 'man'}
#{'_id': ObjectId('5dc7a808f971b26b5833f455'), 'name': 'Jordan', 'age': 10, 'gender': 'man'}   
    

skip

跳过查询的记录

# 查询全部
results = collection.find().sort('name', pymongo.ASCENDING)
print ([result['name'] for result in results])
#['Jordan', 'Jordan', 'Mike']

# skip(2)
results = collection.find().sort('name', pymongo.ASCENDING).skip(2)
print ([result['name'] for result in results])
['Mike']

**注意:*在数据量非常庞大时(千万、亿级别),最好不要用skip()来查询数据,可能导致内存溢出。可以使用
find({'_id': {'$gt': ObjectId('593278c815c2602678bb2b8d')}})
这样的方法来查询。

limit()

读取指定数量的数据记录

results = collection.find().sort('name', pymongo.ASCENDING).limit(1)
print([result['name'] for result in results])
# ['Jordan']

改 : 更新数据

  • db.collection.update_one()
    修改单条文档,返回结果是UpdateResult类型
result = collection.update_one(
              {"name" : "Mike"} , 
              {
                "$inc" : {"age" : 5}, 
                "$set": {"gender": "male"}
              }
)
print(result)   # <pymongo.results.UpdateResult object at 0x10d17b678>

print(result.matched_count, result.modified_count)   # 1  1


collection.update_one({'name':'Mike'},
                      {'$set':{'gender':'qqq'}})

for i in collection.find():
    print (i)
    
{'_id': ObjectId('5dc7a74df971b26b5833f454'), 'name': 'Jordan', 'age': 18, 'gender': 'man'}
{'_id': ObjectId('5dc7a808f971b26b5833f455'), 'name': 'Jordan', 'age': 10, 'gender': 'man'}
{'_id': ObjectId('5dc7a808f971b26b5833f456'), 'name': 'Mike', 'age': 21, 'gender': 'qqq'}
 

$inc

  1. 使用$inc操作符将一个字段的值增加或者减少的格式是 :

{ $inc: { <field1>: <amount1>, <field2>: <amount2>, ... } }

  1. $inc操作符接收正的和负的值

​ 如果指定的字段不存在则$inc操作符创建这个字段并且设置这个字段的值为指定的在值 ,存在则不变

$set用于更新

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

方法一样

删: 删除数据

删除全部

collection.remove()
# {'ok': 1, 'n': 3}

删除一条

result = collection.delete_one({'name': 'Kevin'})
print(result) # <pymongo.results.DeleteResult object at 0x10e6ba4c8>
print(result.deleted_count)  # 1

删除多条

result = collection.delete_many({'name': 'Kevin'})
print(result) # <pymongo.results.DeleteResult object at 0x55e6be5f1>
print(result.deleted_count)  # 4

删除集合

#!/usr/bin/python3
 
import pymongo
 
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["runoobdb"]
mycol = mydb["sites"]
 
mycol.drop()
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Flask-PyMongo是一个用于在Flask应用程序中操作MongoDB数据库的扩展。它提供了方便的方法和函数,使得在Flask应用程序中使用MongoDB变得更加简单。引用中提到的`pymongo.MongoClient`方法可以用于创建与MongoDB数据库的连接。在Flask中,可以使用以下代码创建一个MongoDB连接: ```python from flask import Flask from flask_pymongo import PyMongo app = Flask(__name__) app.config['MONGO_URI'] = 'mongodb://localhost:27017/mydb' # MongoDB数据库的URI mongo = PyMongo(app) ``` 其中,`MONGO_URI`是MongoDB数据库的连接URI,`mydb`是数据库名称。通过以上代码,我们就可以在Flask应用程序中使用`mongo`对象来访问和操作MongoDB数据库。 例如,要向集合中插入一个文档,可以使用以下代码: ```python data = {"name": "John", "age": 25} result = mongo.db.collection.insert_one(data) ``` 其中,`collection`是集合的名称,`insert_one`方法用于插入一个文档。 要从集合中查询文档,可以使用以下代码: ```python document = mongo.db.collection.find_one({"name": "John"}) ``` 这将返回满足条件`{"name": "John"}`的第一个文档。 如果要更新集合中的文档,可以使用以下代码: ```python filter = {"name": "John"} update = {"$set": {"age": 30}} result = mongo.db.collection.update_one(filter, update) ``` 这将更新满足条件`{"name": "John"}`的文档,将其`age`字段的值更新为30。 要删除集合中的文档,可以使用以下代码: ```python filter = {"name": "John"} result = mongo.db.collection.delete_one(filter) ``` 这将删除满足条件`{"name": "John"}`的文档。 总之,Flask-PyMongo是一个方便的扩展,可以帮助你在Flask应用程序中轻松地与MongoDB数据库进行交互。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [python + Flask 操作MongoDB数据库,以及使用中的常见问题](https://blog.csdn.net/qq_43594278/article/details/115555240)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Pymongo操作笔记-详记](https://blog.csdn.net/qq_45020818/article/details/109850245)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值