11.Mongodb与Python的交互

11.1 mgondb与python交互的模块
pip install pymongo
11.2 使用pymongo

11.2.1 导入pymongo并选择要操作的集合

  • 无需权限认证的方式创建连接对象以及集合操作对象
from pymongo import MongoClient

# 创建数据库连接对象
client = MongoClient(host, port)
# 选择数据库和集合
col = client[db名][集合名]
  • 需要权限认证的方式创建连接对象以及集合操作对象
from pymongo import MongoClient

# 创建数据库连接对象
client = MongoClient(host, port)
# 进行认证
db.authenticate('python1','python1')
# 选择数据库和集合
col = client[db名][集合名]
11.2 insert()添加数据
  • collection.insert([{数据1},{数据2}])
# 添加一条数据,直接返回数据结果
ret = col.insert({"name":"test100","age":23})
print(ret)

# 添加多条数据,会返回ObjectId对象构成的列表
item_list = [{name:"test100{}".format(i)} for i in range(10)]
rets = col.insert(item_list)
print(rets)

# 返回ObjectId对象构成的列表
for ret in rets:
    print(ret)
11.3 find_one()查找一条数据
  • 接受一个字典形式的条件,返回字典形式的整条数据 如果条件为空 则返回第一条
ret = client.test.find_one({name:"test1001"})
print(ret)            # 包含mongodb的ObjectID对象的字典
_ = ret.pop("_id")    # 清除mongodb的ObjectId对象的k,v
print(ret)
11.3 find() 查找全部数据
  • 返回所有满族条件的结果,如果条件为空,则返回全部,结果是一个Cursor游标对象,是一个可迭代的对象,可以类似读文件的指针,但是只能够进行一次读取
rets = col.find({"name":"test10005"})
for ret in rets:
    print(ret)
11.4 update()更新数据(全文档覆盖或指定键值,更新一条或多条)
  • 语法:collection.update({条件}),{$set:{指定的kv或完整的一条数据}},multi=False/True,upsert=False/True
  • 参数multi:默认为False,表示更新一条;multi=True则更新多条;multi参数必须和$set一起使用
  • 参数upsert:默认为False;upsert=True则先查询是否存在,存在则更新;不存在就插入
  • $set参数:表示指定字段进行更新
  • 更新一条数据;全文档覆盖;存在就更新,不存在就插入
data = {"msg":"这是一条完整的数据1","name":"哈哈"}
col.update({"haha":"heihei"},{"$set":data},upsert=True)
  • 更新多条数据;全文档覆盖;存在就更新,不存在就插入
data = {"msg":"这是一条完整的数据1","name":"哈哈"}
col.update({},{"$set":data},multi=True,upsert=True)
  • 更新一条数据;指定键值;存在就更新,不存在就插入
data = {"msg":"指定只更新msg___1"}
col.update({},{"$set",data},upsert=True)
  • 更新多条数据;指定键值;存在就更新,不存在就插入
data = {"msg":"指定只更新msg___2"}
col.update({},{"$set":data},multi=True,upsert=True)
11.5 delete_one()删除一条数据
col.delete_one({"name":"test10009"})
  • delete_many()删除全部数据
col.delete_many({"name":"test1006"})
12.pymongo模块其他api

http://api.mongodb.com/python/current/