Mongodb和Python交互

爬虫内容存储

安装模块

安装方式: pip install pymongo

使用

无需权限认证

1
2
3
4
5
6
from pymongo import MongoClient

client = MongoClient(host,port) # 如果是本地连接host,port参数可以省略

collection = client[db名][集合名]
# collection = client.db名.集合名 # 与上边用法相同

需要权限认证

1
2
3
4
5
6
7
8
9
10
11
12
13
14
from pymongo import MongoClient
from urllib.parse import quote_plus

user = 'python' # 账号
password = 'python' # 密码
host = '127.0.0.1' # host
port = 27017 # port
uri = "mongodb://%s:%s@%s" % (quote_plus(user),
quote_plus(password),
host)
# quote_plus函数:对url进行编码
# uri = mongodb://python:python@127.0.0.1
client = MongoClient(uri, port=port)
collection = client.db名.集合名

添加数据

insert可以批量的插入数据列表,也可以插入一条数据

1
2
collection.insert({一条数据})
collection.insert([{数据一},{数据二}])

查找数据

接收一个字典形式的条件,返回字典形式的整条数据

如果条件为空,则返回第一条

1
2
3
4
5
# 查找一条
ret = client.test.test.find_one({'name': 'test10001'})
print(ret) # 包含mongodb的ObjectId对象的字典
_ = ret.pop('_id') # 清除mongodb的ObjectId对象的k,v
print(ret)

返回所有满足条件的结果,如果条件为空,则返回全部

结果是一个Cursor游标对象,是一个可迭代对象,可以类似读文件的指针,但是只能够进行一次读取

1
2
3
4
5
6
# 查找全部
rets = collection.find({"name":"test10005"}),
for ret in rets:
print(ret)
for ret in rets: #此时rets中没有内容
print(ret)

更新数据

collection.update({条件}, {'$set':{指定的kv或完整的一条数据}}, multi=False/True, upsert=False/True)

  • multi参数:默认为False,表示更新一条; multi=True则更新多条; multi参数必须和$set一起使用
  • upsert参数:默认为False; upsert=True则先查询是否存在,存在则更新;不存在就插入
  • $set表示指定字段进行更新
1
2
3
4
5
6
7
#  更新一条数据;全文档覆盖;存在就更新,不存在就插入
data = {'msg':'这是一条完整的数据1','name':'哈哈'}
client.test.test.update({'haha': 'heihei'}, {'$set':data}, upsert=True)

# 更新一条数据;指定键值;存在就更新,不存在就插入
data = {'msg':'指定只更新msg___1'}
client.test.test.update({}, {'$set':data}, upsert=True
1
2
3
4
5
6
7
# 更新多条数据;全文档覆盖;存在就更新,不存在就插入
data = {'msg':'这是一条完整的数据2','name':'哈哈'} # 该完整数据是先查询后获取的
client.test.test.update({}, {'$set':data}, multi=True, upsert=True)

# 更新多条数据;指定键值;存在就更新,不存在就插入
data = {'msg':'指定只更新msg___2'}
client.test.test.update({}, {'$set':data}, multi=True, upsert=True)

删除数据

1
2
# 删除一条
collection.delete_one({"name":"test10010"})
1
2
# 删除全部
collection.delete_many({"name":"test10010"})

Mongodb-py总结

相关文章

Python基础

Python爬虫

Python反爬解决方案

Python爬虫

Python反爬解决方案

Scrapy爬虫

Scrapy爬虫