pymongo 操作
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()
pymongo 操作的更多相关文章
- python操作三大主流数据库(8)python操作mongodb数据库②python使用pymongo操作mongodb的增删改查
python操作mongodb数据库②python使用pymongo操作mongodb的增删改查 文档http://api.mongodb.com/python/current/api/index.h ...
- Python 使用pymongo操作mongodb库
Python 使用pymongo操作mongodb库 2016-12-31 21:55 1115人阅读 评论(0) 收藏 举报 分类: - - - Python(10) 版权声明:本文为博主原创文 ...
- pymongo操作mongodb
此验证中只开启两个mongodb节点,可以连接任意节点,以下操作不涉及读写,不涉及连接那个节点 mongodb连接: from pymongo import MongoReplicaSetClient ...
- python中使用pymongo操作mongo
MongoDB是由C++语言编写的非关系型数据库,是一个基于分布式文件存储的开源数据库系统,其内容存储形式类似JSON对象,它的字段值可以包含其他文档.数组及文档数组,非常灵活.在这一节中,我们就来看 ...
- pymongo操作mongo数据库的查操作
一: 数据结构 { "_id" : ObjectId("5de8a5b748a75a8d48b72bdc"), ", ", ", ...
- MongoDB学习【四】—pymongo操作mongodb数据库
一.pymongodb的安装 Python 要连接 MongoDB 需要 MongoDB 驱动,这里我们使用 PyMongo 驱动来连接. pip安装 pip 是一个通用的 Python 包管理工具, ...
- python 通过pymongo操作mongoDB执行sort
在mongo shell 中对数据进行排序操作的时候 db.getCollection('ANJUKE_PRICE').find({},{'id':1,'_id':0}).sort({'id':1}) ...
- MongoDB、PyMongo数据操作
MongoDB 命令 C:\Program Files\MongoDB\Server\4.0\bin mongo 客户端 mongod 服务端 mongoexport 导出 普通格式,每条记录一行,整 ...
- python操作mongoDB(pymongo的使用)
pymongo操作手册 连接数据库 方法一(推荐) import pymongo client = pymongo.MongoClient(host="localhost",por ...
随机推荐
- Unity Profiler的使用
选中Development Build.Autoconnect Profiler和Script Debugging三个选项,如下图所示. 点击Build And Run按钮,将会编译项目并安装APK到 ...
- WPF开发为按钮提供添加,删除和重新排列ListBox内容的功能
介绍 我有一种情况,我希望能够将项目添加到列表中,并在列表中移动项目,这似乎是使用a的最简单方法ListBox.我立刻想到了如何以通用的方式做到这一点,然后,也许,可以使用行为来做到这一点.这似乎是一 ...
- ASP.NET Core 入门教程 7、ASP.NET Core MVC 分部视图入门
一.前言 1.本教程主要内容 ASP.NET Core MVC (Razor)分部视图简介 ASP.NET Core MVC (Razor)分部视图基础教程 ASP.NET Core MVC (Raz ...
- 多层json的构造,取值,还有使用bootstrap的tree view在前端展示的相关问题
bootstrap-tree view是一款非常好用的插件,它可以添加任意多层节点,效果如下所示: 使用之前需要在HTML页面添加依赖文件: <link href="bootstrap ...
- Linux下创建桌面快捷方式
建立一个文本文件,文件名必须以.desktop结尾,.desktop前面的作为快捷方式的名称 添加如下内容 [Desktop Entry]Encoding=UTF-8Name=PostmanExec= ...
- Python爬虫之正则表达式(1)
廖雪峰正则表达式学习笔记 1:用\d可以匹配一个数字:用\w可以匹配一个字母或数字: '00\d' 可以匹配‘007’,但是无法匹配‘00A’; ‘\d\d\d’可以匹配‘010’: ‘\w\w\d’ ...
- iOS Password AutoFill开发指南
转载请标明来源:https://www.cnblogs.com/zhanggui/p/9431950.html 引言 在<iPhone User Guide for iOS 11.4>这本 ...
- Too many open files问题解决
项目运行过程出现如下问题 经查询,找出原因,并进行解决 具体原因如下: too many open files(打开的文件过多)是Linux系统中常见的错误,从字面意思上看就是说程序打开的文件数过多, ...
- 如何在Asp.Net中使用JQueryEasyUI
JQueryEasyUI的基本信息: 官方下载 官方演示 官方文档 一.jQuery easyUI下载后解压的文件目录如下图: demo:JQueryEasyUI的一些示例页面,在项目使用可以将该目录 ...
- Linux下禁止使用swap及防止OOM机制导致进程被kill掉
首先解释两个概念: swap:在linux里面,当物理内存不够用了,而又有新的程序请求分配内存,那么linux就会选择将其他程序暂时不用的数据交换到物理磁盘上(swap out),等程序要用的时候再读 ...