内容简介:最近这几天准备介绍一下 Python 与三大数据库的使用,这是第一篇,首先来介绍 MongoDB 吧,,走起!!首先介绍一款 MongoDB 的 GUI 工具 Robo 3T,初学 MongoDB 用这个来查看数据真的很爽。可以即时看到数据的增删改查,不用操作命令行来查看。可能大家都对 PyMongo 比较熟悉了,这里就简单介绍它的增删改查等操作。
- 前言
- MongoDB GUI 工具
- PyMongo(同步)
- Motor(异步)
- 后记
前言
最近这几天准备介绍一下 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_id
print(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']
# 获取 collection
collection = 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 的骚操作。尽请期待。
本文首发于公众号「zone7」,关注获取最新推文!
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Programming Amazon Web Services
James Murty / O'Reilly Media / 2008-3-25 / USD 49.99
Building on the success of its storefront and fulfillment services, Amazon now allows businesses to "rent" computing power, data storage and bandwidth on its vast network platform. This book demonstra......一起来看看 《Programming Amazon Web Services》 这本书的介绍吧!