MongoDB和python交互
1. mongdb和python交互的模块
pymongo
提供了mongdb和python交互的所有方法,安装方式: pip install pymongo
2. 使用pymongo
数据库和集合能够自动创建
2.1.1 无需权限认证的方式创建连接对象以及集合操作对象
from pymongo import MongoClient
client = MongoClient(host,port) # 如果是本地连接host,port参数可以省略
collection = client[db名][集合名]
# collection = client.db名.集合名 # 与上边用法相同
2.1.2 需要权限认证的方式创建连接对象以及集合操作对象(方法一现在不用这种方法)
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名.集合名
2.2 insert()添加数据
insert可以批量的插入数据列表,也可以插入一条数据
collection.insert({一条数据})
collection.insert([{数据一},{数据二}])
2.2.1 添加一条数据
返回插入数据的_id
ret = collection.insert({"name":"test10010","age":33})
print(ret)
2.2.2 添加多条数据
返回ObjectId对象构成的列表
item_list = [{"name":"test1000{}".format(i)} for i in range(10)]
rets = collection.insert(item_list)
print(rets)
for ret in rets:
print(ret)
2.3 find_one()查找一条数据
接收一个字典形式的条件,返回字典形式的整条数据如果条件为空,则返回第一条
ret = client.test.test.find_one({'name': 'test10001'})
print(ret) # 包含mongodb的ObjectId对象的字典
_ = ret.pop('_id') # 清除mongodb的ObjectId对象的k,v
print(ret)
2.4 find()查找全部数据
返回所有满足条件的结果,如果条件为空,则返回全部结果是一个Cursor游标对象,是一个可迭代对象,可以类似读文件的指针,但是只能够进行一次读取
rets = collection.find({"name":"test10005"}),
for ret in rets:
print(ret)
for ret in rets: #此时rets中没有内容
print(ret)
2.5 update()更新数据(全文档覆盖或指定键值,更新一条或多条)
- 语法:collection.update({条件}, {'$set':{指定的kv或完整的一条数据}}, multi=False/True, upsert=False/True)
- multi参数:默认为False,表示更新一条; multi=True则更新多条; multi参数必须和$set一起使用
- upsert参数:默认为False; upsert=True则先查询是否存在,存在则更新;不存在就插入
- $set表示指定字段进行更新
2.5.1 更新一条数据;全文档覆盖;存在就更新,不存在就插入
data = {'msg':'这是一条完整的数据1','name':'哈哈'}
client.test.test.update({'haha': 'heihei'}, {'$set':data}, upsert=True)
2.5.2 更新多条数据;全文档覆盖;存在就更新,不存在就插入
data = {'msg':'这是一条完整的数据2','name':'哈哈'} # 该完整数据是先查询后获取的
client.test.test.update({}, {'$set':data}, multi=True, upsert=True)
2.5.3 更新一条数据;指定键值;存在就更新,不存在就插入
data = {'msg':'指定只更新msg___1'}
client.test.test.update({}, {'$set':data}, upsert=True)
2.5.4 更新多条数据;指定键值;存在就更新,不存在就插入
data = {'msg':'指定只更新msg___2'}
client.test.test.update({}, {'$set':data}, multi=True, upsert=True)
2.6 delete_one()删除一条数据
collection.delete_one({"name":"test10010"})
2.7 delete_many()删除全部数据
collection.delete_many({"name":"test10010"})
3. pymongo模块其他api
查看pymongo官方文档或源代码 http://api.mongodb.com/python/current/
4.关于pymongo模块的综合运用
##coding:utf-8
from pymongo import MongoClient #安装pyp install pymongo
# 创建数据库链接对象,连接数据库MongoClient('ip', 端口号)
client = MongoClient('172.16.123.223', 27017)
# 选择admin集合
db = client['admin']
#在admin集合当中选择设置好的用户名和密码,db.authenticate('用户名','密码')
db.authenticate('python','python')
# 选择一个数据集合,如果库里面没有会自动创建
col = client['pydata']['test']
#插入数据
# col.insert({"class":"python37"})#插入一条数据
# col.insert([{"class":"python38"},{"class":"python39"},{"class":"python40"}])#插入多条数据
for data in col.find():#find去出来的是一个数据的列表,find当中可以放筛选条件
print(data)
# print(col.find_one())#查找到一条数据
print("*"*50)
# 全文档覆盖更新
# col.update({筛选条件},{更改内容}) #查询到符合条件的数据进行覆盖操作
# col.update({"class":"python40"},{"message":"helloworld"})
# col.update({},{"$set":{"id":"xxxx-xxxx"}})#查询所有数据,仅对查询到的第一条数据进行修改操作
# col.update({}, {"$set": {"id": "xxxx-xxxx"}}, multi=True) #对查询到的所有的数据进行,字段添加操作
# col.update({"message":"hello world"}, {"$set": {"id": "xxxx-xxx2"}}, upsert=True)#查找到就更新,查找不到就新增
# col.delete_one({"message":"helloworld"})#删除查找到的一条数据
col.delete_many({"id": "xxxx-xxxx"})#删除查找到的多条数据
for data in col.find():
print(data)