三、mongodb数据库系列——mongodb和python交互 总结

一、mongodb和python交互

学习目标
  1. 掌握 mongdb和python交互的增删改查的方法
  2. 掌握 权限认证的方式使用pymongo模块

1. mongdb和python交互的模块

pymongo 提供了mongdb和python交互的所有方法
安装方式: pip install pymongo

2. 使用pymongo

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

数据库和集合能够自动创建

2.1.1 无需权限认证的方式创建连接对象以及集合操作对象
from pymongo import MongoClientclient = MongoClient(host,port) # 如果是本地连接host,port参数可以省略collection = client[db名][集合名]
# collection = client.db名.集合名 # 与上边用法相同
2.1.2 需要权限认证的方式创建连接对象以及集合操作对象
from pymongo import MongoClient
from urllib.parse import quote_plususer = '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"})

代码演示:

from pymongo import MongoClient# 创建数据库链接对象
client = MongoClient('localhost',27017)# 选择一个数据库
db = client['admin']
db.authenticate('root','root')# 选择一个集合
col = client['pydata']['test']# 插入数据
# col.insert_one({"class":"python37"})
# col.insert([{"class":"python36"},{"class":"python38"},{"class":"python39"},{"class":"python40"}])# 查询
# print(col.find())
# for data in col.find():
#     print(data)
# print("_________________________________")
# print(col.find_one())# 更新
# 全文档覆盖更新
# col.update({"class":"python37"},{"message":"hello World!"})
# col.update({},{"$set":{"id":"xxxxx-xxx"}})
# col.update({},{"$set":{"id":"xxxxx-xxx"}},multi=True)
# col.update({"message":"helloWorld!"},{"$set":{"id":"xxxxx-xxx1"}},upsert=True)
# col.update({"message":"hello"},{"$set":{"id":"xxxxx-xxx2"}},upsert=True)# 删除
# col.delete_one({"message":"hello"})
col.delete_many({"id":"xxxxx-xxx"})for data in col.find():print(data)

3. pymongo模块其他api

查看pymongo官方文档或源代码 http://api.mongodb.com/python/current/

小结

  1. 掌握pymongo的增删改查的使用
  2. 掌握权限认证的方式使用pymongo模块

二、总结

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/470982.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Proactor设计模式:单线程高并发

Boost::Asio为同步和异步操作提供了并行支持,异步支持基于前摄器模式,这种模式的优点和缺点可能比只同步或反应器方法要低。让我们检查一下Boost::Asio是如何实现前摄器模式的,没有引用基于平台的细节。前摄器设计模式,改编自POSA…

一、scrapy爬虫框架——概念作用和工作流程 scrapy的入门使用

scrapy的概念和流程 学习目标: 了解 scrapy的概念了解 scrapy框架的作用掌握 scrapy框架的运行流程掌握 scrapy中每个模块的作用 1. scrapy的概念 Scrapy是一个Python编写的开源网络爬虫框架。它是一个被设计用于爬取网络数据、提取结构性数据的框架。 Scrapy 使…

LeetCode 2285. 道路的最大总重要性

文章目录1. 题目2. 解题1. 题目 给你一个整数 n ,表示一个国家里的城市数目。城市编号为 0 到 n - 1 。 给你一个二维整数数组 roads ,其中 roads[i] [ai, bi] 表示城市 ai 和 bi 之间有一条 双向 道路。 你需要给每个城市安排一个从 1 到 n 之间的整…

项目管理——文档的重要性

网址:http://www.cnblogs.com/Andon_liu/p/5272744.html 转载于:https://www.cnblogs.com/bluewhy/p/5274674.html

二、scrapy爬虫框架——scrapy构造并发送请求

scrapy数据建模与请求 学习目标: 应用 在scrapy项目中进行建模应用 构造Request对象,并发送请求应用 利用meta参数在不同的解析函数中传递数据 1. 数据建模 通常在做项目的过程中,在items.py中进行数据建模 1.1 为什么建模 定义item即提前…

LeetCode 2287. 重排字符形成目标字符串

文章目录1. 题目2. 解题1. 题目 给你两个下标从 0 开始的字符串 s 和 target 。你可以从 s 取出一些字符并将其重排,得到若干新的字符串。 从 s 中取出字符并重新排列,返回可以形成 target 的 最大 副本数。 示例 1: 输入:s &…

MVC阻止用户注入JavaScript代码或者Html标记

使用HttpUtility.HtmlEncode("")将字符串进行过滤处理 转载于:https://www.cnblogs.com/xuhongfei/p/5275124.html

Python自动化办公——xlrd、xlwt读写Excel

一、xlrd、xlwt读写Excel 1、读操作 import xlrd# 1、打开工作本workbook xlsx xlrd.open_workbook(r.\7月下旬入库表.xlsx)# 2、打开需要操作的表sheet table xlsx.sheet_by_index(0) # table xlsx.sheet_by_name(7月下旬入库表)# 3、读取指定单元格的数据 print(table.c…

LeetCode 2288. 价格减免

文章目录1. 题目2. 解题1. 题目 句子 是由若干个单词组成的字符串,单词之间用单个空格分隔,其中每个单词可以包含数字、小写字母、和美元符号 $ 。 如果单词的形式为美元符号后跟着一个非负实数,那么这个单词就表示一个价格。 例如 "$…

UWP滑动后退

经过近些年智能手机App的不断发展,用户已经不仅仅满足于功能上的需求。UI、设计等非功能点逐渐在App体验中占了大多数的分数。不知从何时起,滑动手势就成为了App的一个标配。他不仅仅是一个功能,更是一个UI设计。其有以下几个优点&#xff1a…

PyQt5 高级界面控制(表格、树、tab、dock、scrollbar、多文档界面)

文章目录1. 表格与树1.1 QTableView1.2 QListView1.3 QListWidget1.4 QTableWidget表根据界面宽度自动伸缩禁止编辑单击某单元,使之默认选中整行设置宽高度与内容相匹配是否显示表头单元格中放置控件输入行号,快速定位行设置颜色加粗字体排序文本对齐合并…

使用pymysql进行数据库的增删改查

使用pymysql进行数据库的增删改查: import pymysqldatabase pymysql.connect(127.0.0.1,root,root,jxgl,charsetutf8)# 初始化指针 cursor database.cursor()# 增 # sql "insert into students(s_no,s_name,sex,birthday,D_NO,address,phone) VALUES (1230…

人工智能第一次作业

1、 你认为什么是人工智能? 人工智能(Artificial Intelligence)简称AI,主要研究如何用人工的方法和技术,使用各种自动化机器或智能机器(主要指计算机)模仿、延伸和扩展人的智能,实…

PyQt5 高级界面控制(多线程、网页交互、调用JavaScript)

文章目录1. 多线程1.1 QTimer1.2 QThread界面卡住例子分离UI和工作线程1.3 事件处理2. 网页交互显示本地 html显示 html 代码调用 JavaScriptJavaScript 调用 PyQt代码learn from 《PyQt5 快速开发与实战》 https://doc.qt.io/qtforpython/index.html https://www.riverbankcom…

[转]html超链接打开的窗口大小

<a href"#" onclick"javascript:window.open(http://www.baidu.com,,height20,width20,top0,left0,toolbarno,menubarno,scrollbarsno, resizableno,locationno, statusno)">aaaaaaaaaaaaaaa</a> 各项参数 其中yes/no也可使用1/0&#xff1b;p…

读写Excel 用 xlsxwriter,openpyxl 更灵活

一、xlsxwriter的使用&#xff1a; # import xlwt # # workbook xlwt.Workbook() # sheet0 workbook.add_sheet(sheet0) # for i in range(0,300): # sheet0.write(0,i,i) # workbook.save(number.xls)# 以上代码运行会报错&#xff0c;因为xlwt不支持超过256列的表格im…

LeetCode 2293. 极大极小游戏

文章目录1. 题目2. 解题1. 题目 给你一个下标从 0 开始的整数数组 nums &#xff0c;其长度是 2 的幂。 对 nums 执行下述算法&#xff1a; 设 n 等于 nums 的长度&#xff0c;如果 n 1 &#xff0c;终止 算法过程。否则&#xff0c;创建 一个新的整数数组 newNums &#x…

devexpress gridcontrol 内置导航栏,双击后才修改数据

4、 使用Grid内置导航栏 gridControl1.UseEmbeddedNativgatorTrue 设定内置导航栏按钮其他属性 gridControl1.EmbeddedNavigator 5、 GridView内置方式编辑数据 禁止编辑数据 gridView1.OptionsBehavior.Editable False&#xff0c;默认是True 可编辑。 Gridview内置数据编辑器…

Python自动发送微信消息

一、用Python自动发送微信消息 import itchat# enableCmdQRTrue&#xff0c;允许在cmd命令行显示二维码 # hotReloadTrue&#xff0c;允许短期内可以不需要重复登陆 itchat.auto_login(enableCmdQRTrue,hotReloadTrue)# to_name itchat.search_friends(name"微信好友备注…

LeetCode 2294. 划分数组使最大差为 K

文章目录1. 题目2. 解题1. 题目 给你一个整数数组 nums 和一个整数 k 。你可以将 nums 划分成一个或多个 子序列 &#xff0c;使 nums 中的每个元素都 恰好 出现在一个子序列中。 在满足每个子序列中最大值和最小值之间的差值最多为 k 的前提下&#xff0c;返回需要划分的 最…