博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python数据库MongoDB骚操作
阅读量:6548 次
发布时间:2019-06-24

本文共 5292 字,大约阅读时间需要 17 分钟。

前言

最近这几天准备介绍一下 Python 与三大数据库的使用,这是第一篇,首先来介绍 MongoDB 吧,,走起!!

MongoDB GUI 工具

首先介绍一款 MongoDB 的 GUI 工具 Robo 3T,初学 MongoDB 用这个来查看数据真的很爽。可以即时看到数据的增删改查,不用操作命令行来查看。

PyMongo(同步)

可能大家都对 PyMongo 比较熟悉了,这里就简单介绍它的增删改查等操作。

连接

# 普通连接client = MongoClient('localhost', 27017)client = MongoClient('mongodb://localhost:27017/')## 密码连接client = MongoClient('mongodb://username:password@localhost:27017/dbname')db = client.zfdb# db = client['zfdb']test = db.test复制代码复制代码

# 增加一条记录person = {
'name': 'zone','sex':'boy'}person_id = test.insert_one(person).inserted_idprint(person_id)复制代码# 批量插入persons = [{
'name': 'zone', 'sex': 'boy'}, {
'name': 'zone1', 'sex': 'boy1'}]result = test.insert_many(persons)print(result.inserted_ids)复制代码复制代码

# 删除单条记录result1 = test.delete_one({
'name': 'zone'})pprint.pprint(result1)复制代码# 批量删除result1 = test.delete_many({
'name': 'zone'})pprint.pprint(result1)复制代码复制代码

# 更新单条记录res = test.update_one({
'name': 'zone'}, {
'$set': {
'sex': 'girl girl'}})print(res.matched_count)复制代码# 更新多条记录test.update_many({
'name': 'zone'}, {
'$set': {
'sex': 'girl girl'}})复制代码复制代码

# 查找多条记录pprint.pprint(test.find())# 添加查找条件pprint.pprint(test.find({
"sex": "boy"}).sort("name"))复制代码复制代码

聚合

如果你是我的老读者,那么你肯定知道我之前的骚操作,就是用爬虫爬去数据之后,用聚合统计结合可视化图表进行数据展示。

aggs = [ {
"$match": {
"$or" : [{
"field1": {
"$regex": "regex_str"}}, {
"field2": {
"$regex": "regex_str"}}]}}, # 正则匹配字段 {
"$project": {
"field3":1, "field4":1}},# 筛选字段 {
"$group": {
"_id": {
"field3": "$field3", "field4":"$field4"}, "count": {
"$sum": 1}}}, # 聚合操作]result = test.aggregate(pipeline=aggs)复制代码复制代码

例子:以分组的方式统计 sex 这个关键词出现的次数,说白了就是统计有多少个男性,多少个女性。

test.aggregate([{
'$group': {
'_id': '$sex', 'weight': {
'$sum': 1}}}])复制代码复制代码

聚合效果图:(

秋招季,用Python分析深圳程序员工资有多高?
文章配图)

Motor(异步)

Motor 是一个异步实现的 MongoDB 存储库 Motor 与 Pymongo 的配置基本类似。连接对象就由 MongoClient 变为 AsyncIOMotorClient 了。下面进行详细介绍一下。

连接

# 普通连接client = motor.motor_asyncio.AsyncIOMotorClient('mongodb://localhost:27017')# 副本集连接client = motor.motor_asyncio.AsyncIOMotorClient('mongodb://host1,host2/?replicaSet=my-replicaset-name')# 密码连接client = motor.motor_asyncio.AsyncIOMotorClient('mongodb://username:password@localhost:27017/dbname')# 获取数据库db = client.zfdb# db = client['zfdb']# 获取 collectioncollection = db.test# collection = db['test']复制代码复制代码

增加一条记录

添加一条记录。

async def do_insert(): document = {
'name': 'zone','sex':'boy'} result = await db.test_collection.insert_one(document) print('result %s' % repr(result.inserted_id))loop = asyncio.get_event_loop()loop.run_until_complete(do_insert())复制代码复制代码

批量增加记录

添加结果如图所暗示。

async def do_insert(): result = await db.test_collection.insert_many( [{
'name': i, 'sex': str(i + 2)} for i in range(20)]) print('inserted %d docs' % (len(result.inserted_ids),))loop = asyncio.get_event_loop()loop.run_until_complete(do_insert())复制代码复制代码

查找一条记录

async def do_find_one(): document = await db.test_collection.find_one({
'name': 'zone'}) pprint.pprint(document)loop = asyncio.get_event_loop()loop.run_until_complete(do_find_one())复制代码复制代码

查找多条记录

查找记录可以添加筛选条件。

async def do_find(): cursor = db.test_collection.find({
'name': {
'$lt': 5}}).sort('i') for document in await cursor.to_list(length=100): pprint.pprint(document)loop = asyncio.get_event_loop()loop.run_until_complete(do_find())# 添加筛选条件,排序、跳过、限制返回结果数async def do_find(): cursor = db.test_collection.find({
'name': {
'$lt': 4}}) # Modify the query before iterating cursor.sort('name', -1).skip(1).limit(2) async for document in cursor: pprint.pprint(document)loop = asyncio.get_event_loop()loop.run_until_complete(do_find())复制代码复制代码

统计

async def do_count(): n = await db.test_collection.count_documents({}) print('%s documents in collection' % n) n = await db.test_collection.count_documents({
'name': {
'$gt': 1000}}) print('%s documents where i > 1000' % n)loop = asyncio.get_event_loop()loop.run_until_complete(do_count())复制代码复制代码

替换

替换则是将除 id 以外的其他内容全部替换掉。

async def do_replace(): coll = db.test_collection old_document = await coll.find_one({
'name': 'zone'}) print('found document: %s' % pprint.pformat(old_document)) _id = old_document['_id'] result = await coll.replace_one({
'_id': _id}, {
'sex': 'hanson boy'}) print('replaced %s document' % result.modified_count) new_document = await coll.find_one({
'_id': _id}) print('document is now %s' % pprint.pformat(new_document))loop = asyncio.get_event_loop()loop.run_until_complete(do_replace())复制代码复制代码

更新

更新指定字段,不会影响到其他内容。

async def do_update(): coll = db.test_collection result = await coll.update_one({
'name': 0}, {
'$set': {
'sex': 'girl'}}) print('更新条数: %s ' % result.modified_count) new_document = await coll.find_one({
'name': 0}) print('更新结果为: %s' % pprint.pformat(new_document))loop = asyncio.get_event_loop()loop.run_until_complete(do_update())复制代码复制代码

删除

删除指定记录。

async def do_delete_many(): coll = db.test_collection n = await coll.count_documents({}) print('删除前有 %s 条数据' % n) result = await db.test_collection.delete_many({
'name': {
'$gte': 10}}) print('删除后 %s ' % (await coll.count_documents({})))loop = asyncio.get_event_loop()loop.run_until_complete(do_delete_many())复制代码复制代码

后记

MongoDB 的骚操作就介绍到这里,后面会继续写 MySQL 和 Redis 的骚操作。尽请期待。

转载于:https://juejin.im/post/5be2db36518825170b101d6c

你可能感兴趣的文章
kafka producer实例及原理分析
查看>>
程控交换机分机同时拨打外线的方法
查看>>
Python 的深浅拷贝 终于明白了
查看>>
应用为王 从Zpad看“中国创造”
查看>>
以DH的方式实现非对称加密
查看>>
avascript实现页面刷新
查看>>
人工智能下的可穿戴设备 如何争夺物联网的入口
查看>>
FBI网站被黑致数据泄露?官方称这根本是个骗局
查看>>
不法分子散播奥运诈骗链接 伪造APP窃取个人信息
查看>>
如何重塑IT部门以适应全新云环境
查看>>
思科尤岱伟:思科安全因“产品组合”与“集成架构”变得不同
查看>>
如何成为一名优秀的软件测试人员
查看>>
Hadoop专业解决方案-第5章 开发可靠的MapReduce应用
查看>>
关于手机等品牌型号搜索与采集的中文分词分离
查看>>
Cocos2D v2.0至v3.x简洁转换指南(二)
查看>>
[ Talk is Cheap Show me the CODE ] : jQuery Mobile工具栏
查看>>
《裸阳》对互联网公司对技术人的启示
查看>>
Java服务器检测与远程重启
查看>>
想让网站销量爆涨?你离成功只差一个出色的购物车设计
查看>>
Android代码单元测试
查看>>