通过 python 操作mongodb

库引入

Python 要连接 MongoDB 需要 MongoDB 驱动,这里我们使用 PyMongo 驱动来连接。

import pymongo 

链接数据库

创建数据库需要使用 MongoClient 对象,并且指定连接的ip和端口号。

myclient=pymongo.MongoClient("localhost",27017)#连接数据库

查看数据库和集合

dbs=myclient.list_database_names()#查看所有数据库
dbs
['admin', 'config', 'local', 'test']
mydb=myclient['test']#切换/创建(不存在的时候)数据库test

注意: 在 MongoDB 中,数据库只有在内容插入后才会创建! 就是说,数据库创建后要创建集合(数据表)并插入一个文档(记录),数据库才会真正创建

查看集合

colls=mydb.list_collection_names()#查看/罗列集合名
#colls
mycoll=mydb['c1']#切换/显示创建(不存在的时候)集合

显示创建和删除集合

create_collection()创建集合,drop_collection(“love”)删除集合

mydb=myclient['test']
mydb.create_collection("love")#创建集合love
mydb.drop_collection("love")#删除集合love

文档增删改查

查看文档

myclient=pymongo.MongoClient("localhost",27017)#链接服务
mydb=myclient['test']#选择数据库
mycoll=mydb['c1']#选择集合
docs=mycoll.find()#查看文档
#打印文档
for i in docs:print(i)
{'_id': ObjectId('664bef6e3dceef39a819193e'), 'name': 'aa1', 'age': 18.0}
{'_id': ObjectId('664bef6e3dceef39a819193f'), 'name': 'aa2', 'age': 18.0}
{'_id': ObjectId('664bef6e3dceef39a8191940'), 'name': 'aa4', 'age': 20.0}
{'_id': ObjectId('664bef6e3dceef39a8191941'), 'name': 'aa5', 'age': 17.0}

插入文档

插入单个文档

insert_one为插入单个文档。该方法的第一参数是字典key:value 对。

d1={"name":"hakgd","age":88,"major":"大数据"}#python中key也需要使用引号括起来
x=mycoll.insert_one(d1)#插入单个文档insert_one
print(x.inserted_id)#打印文档_id
<pymongo.results.InsertOneResult object at 0x000002049FE76278>
664bfe3b32a3dbc8cddeb487

insert_one() 方法返回 InsertOneResult 对象,该对象包含 inserted_id 属性,它是插入文档的 id值。

插入多个文档

集合中插入多个文档使用 insert_many() 方法,该方法的第一参数是字典列表。

d2=[{"name":"aklgd","age":44},{"name":"vkjz","age":88},{"name":"uixz","age":100}
]
x=mycoll.insert_many(d2)#插入多个文档 insert_many,参数为数组
print(x.inserted_ids)#打印多个文档_id
[ObjectId('664bff1b32a3dbc8cddeb48e'), ObjectId('664bff1b32a3dbc8cddeb48f'), ObjectId('664bff1b32a3dbc8cddeb490')]

insert_many() 方法返回 InsertManyResult 对象,该对象包含 inserted_ids 属性,该属性保存着所有插入文档的_id 值。

查询文档

查看全部文档

dos=mycoll.find()
for i in dos:print(i)
{'_id': ObjectId('664bef6e3dceef39a819193e'), 'name': 'aa1', 'age': 18.0}
{'_id': ObjectId('664bef6e3dceef39a819193f'), 'name': 'aa2', 'age': 18.0}
{'_id': ObjectId('664bef6e3dceef39a8191940'), 'name': 'aa4', 'age': 20.0}
{'_id': ObjectId('664bef6e3dceef39a8191941'), 'name': 'aa5', 'age': 17.0}
{'_id': ObjectId('664bfd6532a3dbc8cddeb484'), 'name': 'hakgd', 'age': 88, 'major': '大数据'}
{'_id': ObjectId('664bfe1132a3dbc8cddeb485'), 'name': 'hakgd', 'age': 88, 'major': '大数据'}
{'_id': ObjectId('664bfe3032a3dbc8cddeb486'), 'name': 'hakgd', 'age': 88, 'major': '大数据'}
{'_id': ObjectId('664bfe3b32a3dbc8cddeb487'), 'name': 'hakgd', 'age': 88, 'major': '大数据'}
{'_id': ObjectId('664bfeff32a3dbc8cddeb488'), 'name': 'aklgd', 'age': 44}
{'_id': ObjectId('664bfeff32a3dbc8cddeb489'), 'name': 'vkjz', 'age': 88}
{'_id': ObjectId('664bfeff32a3dbc8cddeb48a'), 'name': 'uixz', 'age': 100}
{'_id': ObjectId('664bff0e32a3dbc8cddeb48b'), 'name': 'aklgd', 'age': 44}
{'_id': ObjectId('664bff0e32a3dbc8cddeb48c'), 'name': 'vkjz', 'age': 88}
{'_id': ObjectId('664bff0e32a3dbc8cddeb48d'), 'name': 'uixz', 'age': 100}
{'_id': ObjectId('664bff1b32a3dbc8cddeb48e'), 'name': 'aklgd', 'age': 44}
{'_id': ObjectId('664bff1b32a3dbc8cddeb48f'), 'name': 'vkjz', 'age': 88}
{'_id': ObjectId('664bff1b32a3dbc8cddeb490'), 'name': 'uixz', 'age': 100}

因为插入数据时候重复运行了多次,所有数据重复了

按照条件查询

dos=mycoll.find({"age":88},{"_id":0})#find的使用和mongodb一致,第一个参数为查询条件,参数2为(不)显示的列
for i in dos:print(i)
{'name': 'hakgd', 'age': 88, 'major': '大数据'}
{'name': 'hakgd', 'age': 88, 'major': '大数据'}
{'name': 'hakgd', 'age': 88, 'major': '大数据'}
{'name': 'hakgd', 'age': 88, 'major': '大数据'}
{'name': 'vkjz', 'age': 88}
{'name': 'vkjz', 'age': 88}
{'name': 'vkjz', 'age': 88}

还可以使用修饰符,按照范围查询

dos=mycoll.find({"age":{"$lt":20}},{"_id":0})#find的使用和mongodb一致,第一个参数为查询条件,参数2为(不)显示的列
for i in dos:print(i)
{'name': 'aa1', 'age': 18.0}
{'name': 'aa2', 'age': 18.0}
{'name': 'aa5', 'age': 17.0}

正则表达查询

dos=mycoll.find({"name":{"$regex":"^a"}},{"_id":0})#,第一个参数为查询条件,正则匹配name为a开头的文档
for i in dos:print(i)
{'name': 'aa1', 'age': 18.0}
{'name': 'aa2', 'age': 18.0}
{'name': 'aa4', 'age': 20.0}
{'name': 'aa5', 'age': 17.0}
{'name': 'aklgd', 'age': 44}
{'name': 'aklgd', 'age': 44}
{'name': 'aklgd', 'age': 44}

更多查询方法请查看:https://blog.csdn.net/sinat_20471177/article/details/117746948

管道聚合

数据准备

c2=mydb['c2']
d3=[{"name":"张三","age":18,"sex":"男","major":"大数据技术"},{"name":"李四","age":19,"sex":"男",'major':"大数据技术"},{"name":"王五","age":18,"sex":"女","major":"人工智能"}
]
c2.insert_many(d3)
<pymongo.results.InsertManyResult at 0x2049c49f470>
for d in c2.find():print(d)
{'_id': ObjectId('664c044a32a3dbc8cddeb491'), 'name': '张三', 'age': 18, 'sex': '男', 'major': '大数据技术'}
{'_id': ObjectId('664c044a32a3dbc8cddeb492'), 'name': '李四', 'age': 19, 'sex': '男', 'major': '大数据技术'}
{'_id': ObjectId('664c044a32a3dbc8cddeb493'), 'name': '王五', 'age': 18, 'sex': '女', 'major': '人工智能'}

聚合查询

语法格式:

集合.aggregate.([
{"$管道1":{表达式}}{"$管道2":{表达式}}...
])

例如:按major进行分组,统计每个分组中的年龄平均值

#按major进行分组,统计每个分组中的年龄平均值
piple=[{"$group":{"_id":"$major","avg_age":{"$avg":"$age"}}
}]
x=c2.aggregate(piple)
for i in x:print(i)
{'_id': '人工智能', 'avg_age': 18.0}
{'_id': '大数据技术', 'avg_age': 18.5}
#按住major进行分组,统计每个分组中的年龄平均值和计数,并按照平均年龄降序排序
piple2=[{ "$group":{"_id":"$major","avg_age":{"$avg":"$age"},"count":{"$sum":1}}},{"$sort":{"avg_age":-1}}
]
x=c2.aggregate(piple2)
for i in x:print(i)
{'_id': '大数据技术', 'avg_age': 18.5, 'count': 2}
{'_id': '人工智能', 'avg_age': 18.0, 'count': 1}

文档更新

我们可以在 MongoDB 中使用 update_one() 方法修改文档中的记录。该方法第一个参数为查询的条件,第二个参数为要修改的字段。
如果查找到的匹配数据多于一条,则只会修改第一条。

for d in c2.find():print(d)
{'_id': ObjectId('664c044a32a3dbc8cddeb491'), 'name': '张三', 'age': 18, 'sex': '男', 'major': '大数据技术'}
{'_id': ObjectId('664c044a32a3dbc8cddeb492'), 'name': '李四', 'age': 19, 'sex': '男', 'major': '大数据技术'}
{'_id': ObjectId('664c044a32a3dbc8cddeb493'), 'name': '王五', 'age': 18, 'sex': '女', 'major': '人工智能'}
#把王五文档sax字段修改为 男
q={"name":"王五"}#查询条件
n_d={"$set":{"sex":"男"}}#新数据c2.update_one(q,n_d)#update_one修改匹配到的第一个文档for d in c2.find():print(d)
{'_id': ObjectId('664c044a32a3dbc8cddeb491'), 'name': '张三', 'age': 18, 'sex': '男', 'major': '大数据技术'}
{'_id': ObjectId('664c044a32a3dbc8cddeb492'), 'name': '李四', 'age': 19, 'sex': '男', 'major': '大数据技术'}
{'_id': ObjectId('664c044a32a3dbc8cddeb493'), 'name': '王五', 'age': 18, 'sex': '男', 'major': '人工智能'}

update_many为修改多个文档方法,只要条件匹配上则全部修改。例如

#把所有文档年龄全部增加2岁
c2.update_many({},{"$inc":{"age":2}})#同时修改多个文档 update_many
for d in c2.find():print(d)
{'_id': ObjectId('664c044a32a3dbc8cddeb491'), 'name': '张三', 'age': 20, 'sex': '男', 'major': '大数据技术'}
{'_id': ObjectId('664c044a32a3dbc8cddeb492'), 'name': '李四', 'age': 21, 'sex': '男', 'major': '大数据技术'}
{'_id': ObjectId('664c044a32a3dbc8cddeb493'), 'name': '王五', 'age': 20, 'sex': '男', 'major': '人工智能'}

更多更新方法【修改器】请查看:https://blog.csdn.net/sinat_20471177/article/details/117746948

删除文档

for d in c2.find():print(d)
{'_id': ObjectId('664c044a32a3dbc8cddeb491'), 'name': '张三', 'age': 20, 'sex': '男', 'major': '大数据技术'}
{'_id': ObjectId('664c044a32a3dbc8cddeb492'), 'name': '李四', 'age': 21, 'sex': '男', 'major': '大数据技术'}
{'_id': ObjectId('664c044a32a3dbc8cddeb493'), 'name': '王五', 'age': 20, 'sex': '男', 'major': '人工智能'}

我们可以使用 delete_one() 方法来删除一个文档,该方法第一个参数为查询对象,指定要删除哪些数据。

#删除姓名为 王五的文档
c2.delete_one({"name":"王五"})#删除单个
<pymongo.results.DeleteResult at 0x2049fe8bc88>
for d in c2.find():print(d)
{'_id': ObjectId('664c044a32a3dbc8cddeb491'), 'name': '张三', 'age': 20, 'sex': '男', 'major': '大数据技术'}
{'_id': ObjectId('664c044a32a3dbc8cddeb492'), 'name': '李四', 'age': 21, 'sex': '男', 'major': '大数据技术'}

我们可以使用 delete_many() 方法来删除多个文档,该方法第一个参数为查询对象,指定要删除哪些数据。

c2.delete_many({"major":"大数据技术"})#删除多个,如果删除全部,则条件为空
for d in c2.find():print(d)

delete_many() 方法如果传入的是一个空的查询对象,则会删除集合中的所有文档:

其他

dos=mycoll.find()
for i in dos:print(i)
{'_id': ObjectId('664bef6e3dceef39a819193e'), 'name': 'aa1', 'age': 18.0}
{'_id': ObjectId('664bef6e3dceef39a819193f'), 'name': 'aa2', 'age': 18.0}
{'_id': ObjectId('664bef6e3dceef39a8191940'), 'name': 'aa4', 'age': 20.0}
{'_id': ObjectId('664bef6e3dceef39a8191941'), 'name': 'aa5', 'age': 17.0}
{'_id': ObjectId('664bfd6532a3dbc8cddeb484'), 'name': 'hakgd', 'age': 88, 'major': '大数据'}
{'_id': ObjectId('664bfe1132a3dbc8cddeb485'), 'name': 'hakgd', 'age': 88, 'major': '大数据'}
{'_id': ObjectId('664bfe3032a3dbc8cddeb486'), 'name': 'hakgd', 'age': 88, 'major': '大数据'}
{'_id': ObjectId('664bfe3b32a3dbc8cddeb487'), 'name': 'hakgd', 'age': 88, 'major': '大数据'}
{'_id': ObjectId('664bfeff32a3dbc8cddeb488'), 'name': 'aklgd', 'age': 44}
{'_id': ObjectId('664bfeff32a3dbc8cddeb489'), 'name': 'vkjz', 'age': 88}
{'_id': ObjectId('664bfeff32a3dbc8cddeb48a'), 'name': 'uixz', 'age': 100}
{'_id': ObjectId('664bff0e32a3dbc8cddeb48b'), 'name': 'aklgd', 'age': 44}
{'_id': ObjectId('664bff0e32a3dbc8cddeb48c'), 'name': 'vkjz', 'age': 88}
{'_id': ObjectId('664bff0e32a3dbc8cddeb48d'), 'name': 'uixz', 'age': 100}
{'_id': ObjectId('664bff1b32a3dbc8cddeb48e'), 'name': 'aklgd', 'age': 44}
{'_id': ObjectId('664bff1b32a3dbc8cddeb48f'), 'name': 'vkjz', 'age': 88}
{'_id': ObjectId('664bff1b32a3dbc8cddeb490'), 'name': 'uixz', 'age': 100}

限制返回数limit

#查询限制返回数 limit,只返回前5个文档
for i in mycoll.find().limit(5):print(i)
{'_id': ObjectId('664bef6e3dceef39a819193e'), 'name': 'aa1', 'age': 18.0}
{'_id': ObjectId('664bef6e3dceef39a819193f'), 'name': 'aa2', 'age': 18.0}
{'_id': ObjectId('664bef6e3dceef39a8191940'), 'name': 'aa4', 'age': 20.0}
{'_id': ObjectId('664bef6e3dceef39a8191941'), 'name': 'aa5', 'age': 17.0}
{'_id': ObjectId('664bfd6532a3dbc8cddeb484'), 'name': 'hakgd', 'age': 88, 'major': '大数据'}

排序sort

#排序sort,第一个参数为排序字段,参数2为排序方法,按照年龄进行降序排序
for i in mycoll.find().sort("age",-1):print(i)
{'_id': ObjectId('664bfeff32a3dbc8cddeb48a'), 'name': 'uixz', 'age': 100}
{'_id': ObjectId('664bff0e32a3dbc8cddeb48d'), 'name': 'uixz', 'age': 100}
{'_id': ObjectId('664bff1b32a3dbc8cddeb490'), 'name': 'uixz', 'age': 100}
{'_id': ObjectId('664bfd6532a3dbc8cddeb484'), 'name': 'hakgd', 'age': 88, 'major': '大数据'}
{'_id': ObjectId('664bfe1132a3dbc8cddeb485'), 'name': 'hakgd', 'age': 88, 'major': '大数据'}
{'_id': ObjectId('664bfe3032a3dbc8cddeb486'), 'name': 'hakgd', 'age': 88, 'major': '大数据'}
{'_id': ObjectId('664bfe3b32a3dbc8cddeb487'), 'name': 'hakgd', 'age': 88, 'major': '大数据'}
{'_id': ObjectId('664bfeff32a3dbc8cddeb489'), 'name': 'vkjz', 'age': 88}
{'_id': ObjectId('664bff0e32a3dbc8cddeb48c'), 'name': 'vkjz', 'age': 88}
{'_id': ObjectId('664bff1b32a3dbc8cddeb48f'), 'name': 'vkjz', 'age': 88}
{'_id': ObjectId('664bfeff32a3dbc8cddeb488'), 'name': 'aklgd', 'age': 44}
{'_id': ObjectId('664bff0e32a3dbc8cddeb48b'), 'name': 'aklgd', 'age': 44}
{'_id': ObjectId('664bff1b32a3dbc8cddeb48e'), 'name': 'aklgd', 'age': 44}
{'_id': ObjectId('664bef6e3dceef39a8191940'), 'name': 'aa4', 'age': 20.0}
{'_id': ObjectId('664bef6e3dceef39a819193e'), 'name': 'aa1', 'age': 18.0}
{'_id': ObjectId('664bef6e3dceef39a819193f'), 'name': 'aa2', 'age': 18.0}
{'_id': ObjectId('664bef6e3dceef39a8191941'), 'name': 'aa5', 'age': 17.0}

跳过指定数量的文档 skip

#跳过指定数量的文档 skip,返回剩下的文档
for i in mycoll.find().skip(8):print(i)
{'_id': ObjectId('664bfeff32a3dbc8cddeb488'), 'name': 'aklgd', 'age': 44}
{'_id': ObjectId('664bfeff32a3dbc8cddeb489'), 'name': 'vkjz', 'age': 88}
{'_id': ObjectId('664bfeff32a3dbc8cddeb48a'), 'name': 'uixz', 'age': 100}
{'_id': ObjectId('664bff0e32a3dbc8cddeb48b'), 'name': 'aklgd', 'age': 44}
{'_id': ObjectId('664bff0e32a3dbc8cddeb48c'), 'name': 'vkjz', 'age': 88}
{'_id': ObjectId('664bff0e32a3dbc8cddeb48d'), 'name': 'uixz', 'age': 100}
{'_id': ObjectId('664bff1b32a3dbc8cddeb48e'), 'name': 'aklgd', 'age': 44}
{'_id': ObjectId('664bff1b32a3dbc8cddeb48f'), 'name': 'vkjz', 'age': 88}
{'_id': ObjectId('664bff1b32a3dbc8cddeb490'), 'name': 'uixz', 'age': 100}

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

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

相关文章

wireshark抓包,丢包分析?

前言 我们都知道&#xff0c;一般流量分析设备都支持pcap回放离线分析的功能&#xff0c;但如果抓的pcap丢了包&#xff0c;会影响最终安全测试的效果。比如说竞测现场需要提供pcap包测试恶意文件的检测功能&#xff0c;如果pcap中丢包&#xff0c;可能会导致文件还原失败&…

高稳定数显芯片防干扰抗噪数码屏驱动高亮LED驱动IC-VK16K33A/AA 最大13×3的按键扫描

产品型号&#xff1a;VK16K33A/AA 产品品牌&#xff1a;永嘉微电/VINKA 封装形式&#xff1a;SOP28/SSOP28 原厂&#xff0c;工程服务&#xff0c;技术支持&#xff01; 概述 VK16K33A/AA是一种带按键扫描接口的数码管或点阵LED驱动控制专用芯片&#xff0c;内部集成有数据…

2024系统架构师软考考题考点回忆版

2024年5月25日系统架构师软考试题/考点梳理 选择题 (75道单选题) 软件测试(P205) 静态测试:是被测程序不运行,只依靠分析和检查源程序的语句、结构、过程来检查程序是否有错误。动态测试:运行被测试程序,对得到的结果与预期的结果进行比较分析,同时分析运行效率和健壮…

RK3568笔记二十七:LPRNet车牌识别

若该文为原创文章&#xff0c;转载请注明原文出处。 记录自训练并在RK3568上部署。 一、介绍 LPRNet的Pytorch实现&#xff0c;一种高性能和轻量级的车牌识别框架。完全适用于中国车牌识别&#xff08;Chinese License Plate Recognition&#xff09;及国外车牌识别&#xf…

张大哥笔记:赚钱高手养成计划---如何将一份时间产生N份收入?

我们常说的赚钱的四种境界有哪些&#xff1f; 1.靠体力挣钱 2.靠技能挣钱 3.靠知识挣钱 4.靠平台钱生钱 所以对应的收入的模式就会是下面4种模式&#xff1a; 1.一份时间卖1次 2.一份时间卖N次 3.一份时间溢价卖N次 4.购买他人时间为自己所用 时间对于每个人都是相同的…

书生·浦语大模型全链路开源体系-作业1

视频链接&#xff1a;书生浦语大模型全链路开源体系_哔哩哔哩_bilibili 1. LLM发展 LLM是近年来人工智能领域的一个重要发展方向。大型语言模型的历史可以追溯到2017年,当时OpenAI推出了GPT-1(Generative Pre-trained Transformer)模型,这是一个基于Transformer架构的语言生成…

使用OpenVINO™.CSharp.API.Extensions.PaddleOCR NuGet Package快速实现OCR文本识别

PP-OCR是PaddleOCR自研的实用的超轻量OCR系统&#xff0c;可以实现端到端的图像文本检测。为了在C#平台实现使用OpenVINO™部署PP-OCR模型实现文本识别&#xff0c;让更多开发者快速上手PP-OCR项目&#xff0c;基于此&#xff0c;封装了OpenVINO.CSharp.API.Extensions.PaddleO…

【C语言】数据指针地址的取值、赋值、自增操作避坑

【C语言】数据指针的取值、赋值、自增操作避坑 文章目录 指针地址指针自增指针取值、赋值附录&#xff1a;压缩字符串、大小端格式转换压缩字符串浮点数压缩Packed-ASCII字符串 大小端转换什么是大端和小端数据传输中的大小端总结大小端转换函数 指针地址 请看下列代码&#…

嵩山为什么称为五岳之尊

在此之前&#xff0c;人们心目中的五岳之尊一般是东岳泰山。自此以后&#xff0c;观点一定会改变&#xff1a;五岳之尊是中岳嵩山&#xff01;且听我慢慢道来。 首先将二者进行一下对比—— 中与东的对比&#xff0c;嵩山居中&#xff0c;泰山居东。东方是太阳升起的地方&#…

如何运行大模型

简介 要想了解一个模型的效果&#xff0c;对模型进行一些评测&#xff0c;或去评估是否能解决业务问题时&#xff0c;首要任务是如何将模型跑起来。目前有较多方式运行模型&#xff0c;提供client或者http能力。 名词解释 浮点数表示法 一个浮点数通常由三部分组成&#xf…

谷粒商城实战(029 业务-订单支付模块-支付宝支付2)

Java项目《谷粒商城》架构师级Java项目实战&#xff0c;对标阿里P6-P7&#xff0c;全网最强 总时长 104:45:00 共408P 此文章包含第305p-第p310的内容 代码编写 前端代码 这里使用的是jsp 在这里引用之前配置的各种支付信息 在AlipayConfig.java里 这里是调用阿里巴巴写…

AI大模型日报#0527:豆包大模型披露评测成绩、天工AI日活超100万、AI初创集体跳槽OpenAI

导读&#xff1a;AI大模型日报&#xff0c;爬虫LLM自动生成&#xff0c;一文览尽每日AI大模型要点资讯&#xff01;目前采用“文心一言”&#xff08;ERNIE 4.0&#xff09;、“零一万物”&#xff08;Yi-Large&#xff09;生成了今日要点以及每条资讯的摘要。欢迎阅读&#xf…

PyQt5-新手避坑指南(持续更新)

文章目录 一&#xff0e;前言二&#xff0e;开发环境三&#xff0e;坑1.程序没有详细报错就退出了2.qrc资源文件的使用3.QLabel文字自动换行4.图片自适应大小5.checkbox自定义样式后✓不见了6.多线程 四&#xff0e;记录 一&#xff0e;前言 本篇博客整理了一些初学者容易犯的…

技术贴 | Query 物理计划构建指南

在往期博客《执行器 - Query 执行详解》中&#xff0c;我们介绍到到一条 Query 的 SQL 语句需要经过&#xff1a;词法分析 —— 生成 AST 语法树 —— 生成物理计划。本期博客我们接续上篇讲解一条 Query 语句物理计划的具体结构&#xff0c;以及如何构建物理计划。 物理计划是…

Jmeter环境安装(超级简单)

Jmeter的安装是非常简单的&#xff0c;只需要将下载的安装包解压后&#xff0c;就可以运行了&#xff01;&#xff01; 一、首先要下载Jmeter 1.1、官网下载&#xff1a; 下载最新版&#xff1a;https://jmeter.apache.org/download_jmeter.cgi https://jmeter.apache.org/…

论文阅读》学习了解自己:一个粗略到精细的个性化对话生成的人物感知训练框架 AAAI 2023

《论文阅读》学习了解自己&#xff1a;一个粗略到精细的个性化对话生成的人物感知训练框架 AAAI 2023 前言 简介研究现状任务定义模型架构Learning to know myselfLearning to avoid Misidentification损失函数实验结果消融实验 前言 亲身阅读感受分享&#xff0c;细节画图解释…

代码随想录算法训练营第四十一天 | 理论基础、509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯

理论基础 代码随想录 视频&#xff1a;从此再也不怕动态规划了&#xff0c;动态规划解题方法论大曝光 &#xff01;| 理论基础 |力扣刷题总结| 动态规划入门_哔哩哔哩_bilibili 动归五部曲 1.dp数组以及下标的含义 2.递推公式 3.dp数组如何初始化 4.遍历顺序(例如先背包再…

一个程序员的牢狱生涯(40)好事

星期一 好 事 小X州脸上的掌印是谁留下的? 我想起我们排队去小卖铺的时候,号子里有几个人没有出去。头铺应该不会动手的,老汉整天闷着不说话,也不会是他,那就只剩下了大镣!不过小X州这小子也是该他挨打,刚惹了大镣不说,在大家都去小卖铺的时候他还没去,这不是自己上赶…

java_方法重写(覆盖)

介绍 现在我们来试一下 代码 父类 package b;public class father_ {//father class//4attributepublic void cry() {System.out.println("小动物叫唤");} } package b; 子类 public class graduate extends father_ {public void cry() {//子类方法//非私有的属性和…

数据访问层设计_4.灵活运用XML Schema

1.XML Schema XML Schema用来描述XML文档合法结构、内容和限制。XML Schema由XML1.0自描述&#xff0c;并且使用了命名空间&#xff0c;有丰富的内嵌数据类型及其强大的数据结构定义功能&#xff0c;充分地改造了并且极大地扩展了DTDs&#xff08;传统描述XML文档结构和内容限…