Python连接MondoDB教程
必须工作
- 连接MongoDB,这里使用pymongo库。
client = pymongo.MongoClient(host='localhost', port=27017)
- 连接一个数据库,如果没有则会自动创建。
db = client.demodb
- 连接一个数据表,如果没有则会自动创建。
info = db.info
增
- 添加文本,使用 insert_ont()或者insert_many() 方法
- 添加一组文本
- 新建一组需要添加的数据,字典格式(JSON)
data = { 'name': 'MonkeyHJY', 'height': '182CM', 'weight': '90KG', 'date': '2020/4/17 10:36' }
- 执行添加语法
x = info.insert_one(data)
- 注意:如果我们在插入值的时候没有指定 _id 的话,MongoDN会自动帮我们生成一个。
- 新建一组需要添加的数据,字典格式(JSON)
- 添加多个文本
- 新建一个包含多组数据的列表
data = [ {'name': 'HCL', 'height': '160CM', 'weight': '50KG', 'date': '2020/4/17 11:12'}, {'name': 'LP', 'height': '175CM', 'weight': '60KG', 'date': '2020/4/17 11:20'}, ]
- 执行添加语法:
x = info.insert_many(data)
- 注意:由于我们没有指定 _id ,所以依然会默认随机添加。
- 获取多个添加的_id:
print(x.inserted_ids)
- 新建一个包含多组数据的列表
- 添加一个指定 _id 的文本
- 新建一个包含 _id 的数据字典
data = { '_id': 1, 'name': 'MonkeyHJY', 'height': '182CM', 'weight': '90KG', 'date': '2020/4/17 11:30' }
- 执行插入语句与上面相同
- 打印插入一条数据的 _id :
print(x.inserted_id)
- 新建一个包含 _id 的数据字典
- 插入指定 _id 的多个文本同理。不再赘述。
- 添加一组文本
查
当前测试数据
{'_id': ObjectId('5e9917083392ff666e2719bb'), 'name': 'MonkeyHJY', 'height': '182CM', 'weight': '90KG', 'date': '2020/4/17 10:36'}
{'_id': ObjectId('5e991efc62880d021c172e35'), 'name': 'HCL', 'height': '160CM', 'weight': '50KG', 'date': '2020/4/17 11:12'}
{'_id': ObjectId('5e991efc62880d021c172e36'), 'name': 'LP', 'height': '175CM', 'weight': '60KG', 'date': '2020/4/17 11:20'}
{'_id': 1, 'name': 'MonkeyHJY', 'height': '182CM', 'weight': '90KG', 'date': '2020/4/17 11:30'}
- 查询数据,使用 find_one()或者find() 方法,返回一个包含数据的字典(JSON)数据
- 不指定查询参数,则查询第一条数据
- 代码:
x = info.find_one()
- 返回结果:
{’_id’: ObjectId(‘5e9917083392ff666e2719bb’), ‘name’: ‘MonkeyHJY’, ‘height’: ‘182CM’, ‘weight’: ‘90KG’, ‘date’: ‘2020/4/17 10:36’}
- 代码:
- 指定查询参数,则查询符合参数的第一个数据
- 代码:
x = info.find_one({'name': 'MonkeyHJY'})
- 返回结果:
{’_id’: ObjectId(‘5e9917083392ff666e2719bb’), ‘name’: ‘MonkeyHJY’, ‘height’: ‘182CM’, ‘weight’: ‘90KG’, ‘date’: ‘2020/4/17 10:36’}
- 代码:
- 不指定查询参数,则查询第一条数据
- 查询多条数据,使用 find() 方法,会返回一个包含查询数据的列表
- 不指定查询参数,则返回所有数据
- 代码:
x = info.find() for i in x: print(i)
- 返回结果
{'_id': ObjectId('5e9917083392ff666e2719bb'), 'name': 'MonkeyHJY', 'height': '182CM', 'weight': '90KG', 'date': '2020/4/17 10:36'} {'_id': ObjectId('5e991efc62880d021c172e35'), 'name': 'HCL', 'height': '160CM', 'weight': '50KG', 'date': '2020/4/17 11:12'} {'_id': ObjectId('5e991efc62880d021c172e36'), 'name': 'LP', 'height': '175CM', 'weight': '60KG', 'date': '2020/4/17 11:20'} {'_id': 1, 'name': 'MonkeyHJY', 'height': '182CM', 'weight': '90KG', 'date': '2020/4/17 11:30'}
- 代码:
- 指定查询参数,则返回符合参数的所有数据。不再进行演示
- 不指定查询参数,则返回所有数据
改
- 修改数据,使用 update_one()或者update_many() 方法。本例使用数据与上例相同
- 修改单个数据
- 代码。(下面的代码将 name 为 LP 的数据的 height 字段修改为 180CM)
print('='*5, '修改前的数据', '='*5) x = info.find_one({'name': 'LP'}) print(x) info.update_one({'name': 'LP'}, {'$set': {'height': '180CM'}}) print('='*5, '修改后的数据', '='*5) x = info.find_one({'name': 'LP'}) print(x)
- 打印结果
===== 修改前的数据 ===== {'_id': ObjectId('5e991efc62880d021c172e36'), 'name': 'LP', 'height': '175CM', 'weight': '60KG', 'date': '2020/4/17 11:20'} ===== 修改后的数据 ===== {'_id': ObjectId('5e991efc62880d021c172e36'), 'name': 'LP', 'height': '180CM', 'weight': '60KG', 'date': '2020/4/17 11:20'}
- 代码。(下面的代码将 name 为 LP 的数据的 height 字段修改为 180CM)
- 修改多条数据
- 代码(下面的代码将 name 字段中以 M 开头的数据的 weight 字段修改为 80KG)
print('='*5, '修改前的数据', '='*5) x = info.find({'name': {'$regex': '^M'}}) for i in x: print(i) info.update_many({'name': {'$regex': '^M'}}, {'$set': {'weight': '80KG'}}) print('='*5, '修改后的数据', '='*5) x = info.find({'name': {'$regex': '^M'}}) for i in x: print(i)
- 打印结果
===== 修改前的数据 ===== {'_id': ObjectId('5e9917083392ff666e2719bb'), 'name': 'MonkeyHJY', 'height': '182CM', 'weight': '90KG', 'date': '2020/4/17 10:36'} {'_id': 1, 'name': 'MonkeyHJY', 'height': '182CM', 'weight': '90KG', 'date': '2020/4/17 11:30'} ===== 修改后的数据 ===== {'_id': ObjectId('5e9917083392ff666e2719bb'), 'name': 'MonkeyHJY', 'height': '182CM', 'weight': '80KG', 'date': '2020/4/17 10:36'} {'_id': 1, 'name': 'MonkeyHJY', 'height': '182CM', 'weight': '80KG', 'date': '2020/4/17 11:30'}
- 代码(下面的代码将 name 字段中以 M 开头的数据的 weight 字段修改为 80KG)
- 修改单个数据
删
- 删除集合。使用 drop() 方法
- 代码:
info.drop()
- 返回值:删除成功则返回True
- 代码:
- 删除文档
- 删除单个文档。使用 delete_one() 方法
- 代码:
print('='*5, '删除前的数据', '='*5) x = info.find() for i in x: print(i) info.delete_one({'_id': 1}) print('='*5, '删除前的数据', '='*5) x = info.find() for i in x: print(i)
- 打印结果
===== 删除前的数据 ===== {'_id': ObjectId('5e9917083392ff666e2719bb'), 'name': 'MonkeyHJY', 'height': '182CM', 'weight': '80KG', 'date': '2020/4/17 10:36'} {'_id': ObjectId('5e991efc62880d021c172e35'), 'name': 'HCL', 'height': '160CM', 'weight': '50KG', 'date': '2020/4/17 11:12'} {'_id': ObjectId('5e991efc62880d021c172e36'), 'name': 'LP', 'height': '180CM', 'weight': '60KG', 'date': '2020/4/17 11:20'} {'_id': 1, 'name': 'MonkeyHJY', 'height': '182CM', 'weight': '80KG', 'date': '2020/4/17 11:30'} ===== 删除前的数据 ===== {'_id': ObjectId('5e9917083392ff666e2719bb'), 'name': 'MonkeyHJY', 'height': '182CM', 'weight': '80KG', 'date': '2020/4/17 10:36'} {'_id': ObjectId('5e991efc62880d021c172e35'), 'name': 'HCL', 'height': '160CM', 'weight': '50KG', 'date': '2020/4/17 11:12'} {'_id': ObjectId('5e991efc62880d021c172e36'), 'name': 'LP', 'height': '180CM', 'weight': '60KG', 'date': '2020/4/17 11:20'}
- 代码:
- 删除多条数据使用方法 delete_many() ,其余大同小异,不再赘述。
- 补充
上面的代码可以打印删除的数据的条数。x = info.delete_many({...}) print(x.deleted_count)
- 删除单个文档。使用 delete_one() 方法