python 操作 mongoDB
模块
pymongo
安装方法
sudo pip3 install pymongo
操作步骤
1. 创建数据库连接对象
conn = pymonge.MomgoClient("localhost",27017)
2. 生成操作的数据库对象
db = conn.stu
3. 生成集合对象
myset = db.class0
4. 通过 集合对象 调用结构完成数据操作
['_BaseObject__codec_options',
'_BaseObject__read_concern',
'_BaseObject__read_preference',
'_BaseObject__write_concern',
'_Collection__create',
'_Collection__create_index',
'_Collection__database',
'_Collection__find_and_modify',
'_Collection__full_name',
'_Collection__name',
'_Collection__write_response_codec_options',
'__call__',
'__class__',
'__delattr__',
'__dict__',
'__dir__',
'__doc__',
'__eq__',
'__format__',
'__ge__',
'__getattr__',
'__getattribute__',
'__getitem__',
'__gt__',
'__hash__',
'__init__',
'__iter__',
'__le__',
'__lt__',
'__module__',
'__ne__',
'__new__',
'__next__',
'__reduce__',
'__reduce_ex__',
'__repr__',
'__setattr__',
'__sizeof__',
'__str__',
'__subclasshook__',
'__weakref__',
'_command',
'_count',
'_delete',
'_insert',
'_insert_one',
'_legacy_write',
'_socket_for_primary_reads',
'_socket_for_reads',
'_socket_for_writes',
'_update',
'aggregate',
'bulk_write',
'codec_options',
'count',
'create_index',
'create_indexes',
'database',
'delete_many',
'delete_one',
'distinct',
'drop',
'drop_index',
'drop_indexes',
'ensure_index',
'find',
'find_and_modify',
'find_one',
'find_one_and_delete',
'find_one_and_replace',
'find_one_and_update',
'full_name',
'group',
'index_information',
'initialize_ordered_bulk_op',
'initialize_unordered_bulk_op',
'inline_map_reduce',
'insert',
'insert_many',
'insert_one',
'list_indexes',
'map_reduce',
'name',
'next',
'options',
'parallel_scan',
'read_concern',
'read_preference',
'reindex',
'remove',
'rename',
'replace_one',
'save',
'update',
'update_many',
'update_one',
'with_options',
'write_concern']
集合对象内的所有方法
5. 关闭数据库连接
db.close()
数据操作
插入文档
insert_many 插入多条
insert_one 插入一条
insert 插入一条或多条
save 保存文档
实例
myset.insert_one({"name":"张铁林","King":"乾隆"})
myset.insert_many([{"name":"张国立","King":"康熙"}, {"name":"陈道明","King":"康熙"}])
myset.insert({"name":"唐国强","King":"雍正"})
myset.insert([{"name":"陈建斌","King":"雍正"}, {"_id":1, "name":"吴奇隆","King":"四爷"}])
myset.save({"_id":1,"name":"聂远","King":"乾隆"})
查找文档
find 查找所有
find_one 查找首个
find
find(query,field)
参数形式 同 mongoshell 中的 find
返回值 游标对象
对比 mongoDB 的语句
所有的操作符加上引号,作为字符串形式
true/false/null 改成 True/False/None
实例
cursor = myset.find({"name":{"$exists":True}},{"_id":0}) for i in cursor:
# print(i)
print(i["name"],"--",i["King"])
cursor 对象属性函数
cursor 本质为返回的文档集合的序列, 同 mongoDB 一样可以继续调用其他的精确筛选方法
next() 获取下一个文档
limit() 获取前几条文档
skip() 跳过几条
count() 计数
sort() 排序
* sort 的参数发生了变化 sort([(域名,1/-1),(),()...])
* limit,sort,skip 使用时, 必须保证游标在最开始的位置
实例
# for i in cursor.limit(3):
# for i in cursor.skip(3):
# for i in cursor.sort([("name",1),("age",-1)]):
for i in cursor.sort([("name",1)]):
print(i)
find_one
find_one(query,field)
功能 查找首个符合条件的文档
参数 同 find
返回值 返回字典(只查到首条, 因此返回数据也是单数据, 即 字典)
实例
dic = {"$or":[{"King":"乾隆"},{"name":"陈道明"}]}
d = myset.find_one(dic,{"_id":0})
print(d)
修改操作
update_one 修改一个
update_many 修改多个
update 修改一个或多个
实例
myset.update_many({"King":"康熙"},{"$set":{"king_name":"玄烨"}})
myset.update_one({"King":"雍正"},{"$set":{"king_name":"忘了名字"}})
myset.update_one({"name":"郑少秋"},{"$set":{"King":"乾隆"}},upsert=True)
myset.update({"King":"乾隆"},{"$set":{"king_name":"弘历"}})
myset.update({"King":"乾隆"},{"$set":{"king_name":"弘历"}},multi=True)
删除操作
delete_one 删除一个
delete_many 删除多个
remove 删除一个或多个
实例
myset.delete_one({"King":"康熙"})
myset.delete_many({"King":"雍正"})
myset.remove({"king_name":{"$exists":False}})
myset.remove({"king_name":None},multi=True)
复合操作
find_one_and_update
find_one_and_delete
实例
data = myset.find_one_and_delete({"name":"张铁林"})
print(data)
文档操作整体实例
from pymongo import MongoClient # 创建数据库链接
conn = MongoClient("localhost",27017) # 创建数据库对象
db = conn.stu
# db = conn["stu"] # 生成集合对象
myset = db.class0
# myset = db["class0"] # 创建集合对象
myset = db.class4 # 数据操作 # -----------------------insert----------------------
# myset.insert_one({"name":"张铁林","King":"乾隆"}) # myset.insert_many([{"name":"张国立","King":"康熙"},\
# {"name":"陈道明","King":"康熙"}]) # myset.insert({"name":"唐国强","King":"雍正"})
# myset.insert([{"name":"陈建斌","King":"雍正"},\
# {"_id":1, "name":"吴奇隆","King":"四爷"}]) # myset.save({"_id":1,"name":"聂远","King":"乾隆"}) # ----------------------find-----------------------
# cursor = myset.find({"name":{"$exists":True}},{"_id":0})
# print(cursor.next()) # 打印下一个文档
# for i in cursor:
# print(i)
# print(i["name"],"--",i["King"])
# 所有的操作符加上引号,作为字符串形式
# true/false/null 改成 True/False/None # for i in cursor.limit(3):
# for i in cursor.skip(3):
# for i in cursor.sort([("name",1),("age",-1)]):
# for i in cursor.sort([("name",1)]):
# print(i)
# limit,sort,skip 使用时, 必须保证游标在最开始的位置 # dic = {"$or":[{"King":"乾隆"},{"name":"陈道明"}]}
# d = myset.find_one(dic,{"_id":0})
# print(d) # ----------------------update-----------------------
# myset.update_many({"King":"康熙"},{"$set":{"king_name":"玄烨"}})
# myset.update_one({"King":"雍正"},{"$set":{"king_name":"忘了名字"}})
# myset.update_one({"name":"郑少秋"},{"$set":{"King":"乾隆"}},upsert=True)
# myset.update({"King":"乾隆"},{"$set":{"king_name":"弘历"}})
# myset.update({"King":"乾隆"},{"$set":{"king_name":"弘历"}},multi=True) # ------------------------delete----------------------
# myset.delete_one({"King":"康熙"})
# myset.delete_many({"King":"雍正"})
# myset.remove({"king_name":{"$exists":False}})
# myset.remove({"king_name":None},multi=True) # ------------------------复合操作----------------------
# data = myset.find_one_and_delete({"name":"张铁林"})
# print(data) # 关闭链接
conn.close()
索引操作
create_index 创建索引
参数: 二元元组构成列表
create_index([("age",1)])
create_index([("age",1),("name":-1)])
也可以直接写 域名 ("age") 表示对该域创建正向索引
返回值: 索引名称
list_indexes 查看索引
drop_index 删除索引
drop_indexes 删除所有索引
聚合操作
aggregate()
功能 完成聚合操作
参数 聚合管道, 同mongoshell 中的聚合
返回值 数据操作结果游标对象
实例
lis = [
{"$group": {"_id": "$sex", "num": {"$sum": 1}}},
]
cursor = myset.aggregate(lis)
索引聚合实例
from pymongo import MongoClient conn = MongoClient("localhost", 27017)
db = conn.stu
myset = db.class0 # -------------------------------索引--------------------------------
# 创建
# index_name = myset.create_index("name")
# index_age = myset.create_index("age",name="Age",sparse=True)
# index_age = myset.create_index("age",name="Age",sparse=True,unique=True) # 删除索引
# myset.drop_index("Age")
# myset.drop_indexes() # 查看
# for i in myset.list_indexes():
# print(i) # ------------------------------聚合----------------------------------
lis = [
{"$group": {"_id": "$sex", "num": {"$sum": 1}}},
] cursor = myset.aggregate(lis)
for i in cursor:
print(i) conn.close()
文件操作
1. 导入bson 二进制模块,连接数据库
import bson.binary
2. 选择要存储的文件, 使用 rb 方式读取内容
3. 将读取的内容转换为 bson 格式
content = bson.binary.Binary(data)
功能 将 bytes 字串 转换为 bson 格式
参数 bytes 字串
返回值 转换后的数据
4. 将内容插入到数据库
实例
from pymongo import MongoClient
import bson.binary conn = MongoClient("localhost",27017)
db = conn.image
myset = db.mm # --------------------存储----------------------------------
# 读取图片内容
# with open("123.PNG","rb") as f:
# data = f.read() # 格式转化
# conntent = bson.binary.Binary(data) # 插入数据库
# myset.insert_one({"filename":"123.jpg","data":conntent}) #--------------------取出文件-------------------------------
# img = myset.find_one({"filename":"123.jpg"}) # 写入本地
# with open("123.jpg","wb") as f: # find_one 会自动转换不需要自己再转换了
# f.write(img["data"]) conn.close()