游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

Python和MongoDB其实很配

  MongoDB其实就是一个大大的JSON,在Python的世界里dict也是最吃香的类型,所以,他们天生就是一对。MongoDB的安装
  推荐使用Docker来部署管理,一行命令就可以搞定,官方版本:dockerrundnamemongodbeMONGOINITDBROOTUSERNAMEadmineMONGOINITDBROOTPASSWORDadminvdatamongodir:datadbp27017:27017mongo
  官方版本的Docker啥都好,就是体积有点大。还有一个小体积的alpine版本,开发时使用很方便,不过不能配置账户和密码。dockerrundnamemongolitep27018:27017vdatamongolite:datadbmvertesalpinemongo
  如果想尝试Mongo的命令行(MongoShell),直接进到Docker里:dockerexecitmongolitemongoMongoDBshellversionv4。0。6connectingto:mongodb:127。0。0。1:27017?gssapiServiceNamemongodb。。。usemydbswitchedtodbmydbdb。User。insertOne({name:Toby,age:18}){acknowledged:true,insertedId:ObjectId(612c84c5d93795436ad27ebc)}db。User。find(){id:ObjectId(612c84c5d93795436ad27ebc),name:Toby,age:18}
  MongoShell官方文档:https:docs。mongodb。commanualreferencemongoshellPyMongo五分钟上手
  安装PyMongo可以通过pip搞定。pipinstallpymongo
  以下内容也可以参考官方文档:https:pymongo。readthedocs。ioenstable连接数据库
  常见方式如下:frompymongoimportMongoClient连接有密码的MongoclientMongoClient(mongodb:admin:adminlocalhost:27017)连接没密码的MongoclientMongoClient(mongodb:localhost:27018)列出所有已经存在的DBfordbinclient。listdatabases():print(db)使用Mongo里的某个DB,这个DB可以不存在,后面写数据时会被创建出来dbclient。mydb插入数据
  插入的每条数据都是一个dict,一样的字段允许类型不一样,也允许每次插入的数据字段不一样,可以理解成动态类型数据,你想放什么都行,唯一的约束就是他们会被放在同一个Document里。插入一条数据defaddoneuser():db。User。insertone({name:Toby,age:18})插入多条数据defaddmanyusers():db。User。insertmany(〔{name:Tom,age:10},{name:Toby,age:unknown,hobbies:〔writebugs,raisedogs〕}〕)
  这里的User约等于关系型数据库的表,但它的名字叫Document,每次数据插入完成后会返回一个id,这是Mongo里最重要的东西了,它就是靠这个id来保证数据的一致性,后续的数据修改和删除主要就是靠这个id来完成,所以一般针对某条特定的数据的处理,都是需要先查询它的id,然后再进行后面的操作。查询数据查询多个数据defshowusers():一个表里所有数据foreindb。User。find():print(e)匹配条件的多条数据foreindb。User。find({name:Toby}):print(e)查询单个数据defqueryuser(name):returndb。User。findone({name:name})忽略大小写defqueryuserignorecase(name):returndb。User。findone({name:re。compile(name,re。IGNORECASE)})使用运算符https:docs。mongodb。commanualreferenceoperatorquerydefqueryteenager():returndb。User。findone({age:{lt:18}})
  Mongo的查询主要还是依赖DB自己提供的运算符,在PyMongo里要注意,这里不会抛出异常,如果找不到数据,默认返回None。通过运算符查询数据:https:docs。mongodb。commanualreferenceoperatorquery通过聚合查询数据:https:docs。mongodb。commanualaggregation修改数据修改一个数据defupdateuser(user,attributes:dict):user。update(attributes)resultdb。User。replaceone({id:user〔id〕},user,upsertTrue)return{affectedcount:result。modifiedcount}uqueryuserignorecase(toby)resultupdateuser(u,{code:python})修改多个数据,注意有坑,Replace和Update是不一样的defupdatemany():todo〔UpdateOne({age:19},{set:{name:Toby}}),ReplaceOne({name:Tom},{age:19}),name会被吃掉〕resultdb。User。bulkwrite(todo)print(result。matchedcount)
  Replace是替换,所以要带上原有字段,这里有点坑。Update不接受单独的dict,需要用setunset来标识修改的字段的方式。〔{set:{status:Modified,comments:〔misc1,misc2〕}},{unset:〔misc1,misc2〕}〕删除数据defdeleteuser(name):resultdb。User。deleteone({name:name})return{affectedcount:result。deletedcount}
  删除多个数据:db。test。countdocuments({x:1})3resultdb。test。deletemany({x:1})result。deletedcount3db。test。countdocuments({x:1})0常见问题有什么办法可以让Mongo不自动添加id到我的数据里?
  几乎没有,这是MongoDB的特性决定的,如果你的数据没有ID的话,并且进行高并发插入时,大概率会遇到BulkWriteError这个错误。doc{}collection。insertmany(docforinrange(10))Traceback(mostrecentcalllast):。。。pymongo。errors。BulkWriteError:batchoperrorsoccurreddoc{id:ObjectId(560f171cfba52279f0b0da0c)}docs〔{}〕collection。insertmany(docs10)Traceback(mostrecentcalllast):。。。pymongo。errors。BulkWriteError:batchoperrorsoccurreddocs〔{id:ObjectId(560f1933fba52279f0b0da0e)}〕
  如果你不想要自动生成的ID,可以自己在插入数据前指定这个字段。为啥我指定了id还是查询不到我的数据?
  比如我要查询数据库里的某个post:postidasstrstr(postid)posts。findone({id:postidasstr})Noresult
  因为pyMongo里的这个ID不是字符串类型,你需要做一下数据转换。frombson。objectidimportObjectIdThewebframeworkgetspostidfromtheURLandpassesitasastringdefget(postid):ConvertfromstringtoObjectId:documentclient。db。collection。findone({id:ObjectId(postid)})用标准库里的json模块来序列化和反序列化Mongo的数据会有什么问题?
  有一些数据类型在反序列后会得不到预期的结果,比如ObjectId和DBRef,PyMongo为了解决这个问题自己封装了一个辅助类jsonutil,可以很好的解决这些问题。frombson。jsonutilimportloadsfrombson。jsonutilimportdumps总结
  Mongo属于非关系型数据库,使用Mongo作为DB的思维需要做比较大的转变:关系型数据库一般读写容易,修改难,容易理解非关系型数据库一般是读写改容易,设计难(相对而言)
  关系型数据库支持ACID(Atomicity,Consistency,Isolation,Duration)即原子性,一致性,隔离性和持续性。相对而言,NoSQL采用更宽松的模型BASE(BasicallyAvailable,Softstate,EventualConsistency)即基本可用,软状态和最终一致性。
  NoSQL在精心的设计下查询性能会更高,数据结构也十分有弹性,特别适合快速发展和属性不确定的产品功能,但Mongo不支持事务,如何确保数据一致性是个挺大的挑战。
  在选择上可以考虑从以下角度去思考:需要ACID还是BASE需要结构化数据还是非结构化数据需要对数据进行灵活扩展开发人员的经验
  很多情况只考虑最后一点就可以了。

今年双十一买小米11会不会出现为什么小米11会烧WIFI?查阅了一些资料,主要还是高通骁龙888的温度过高导致,温度过高后,可能会导致CPU和主板特定位置上的几个焊点断开,出现WIFI无法使用的问题,那么解……鸿蒙这么优秀,为什么大家不支持一下国产华为?在支持,很多企业已经入场鸿蒙了,没告诉我们而已。〔捂脸〕〔捂脸〕〔捂脸〕适配的更多,你可以了解下,未来大规模商业化不可避免。因为,抛开整治因素,鸿蒙是基于微内核的,是真正的物联……怎么做一个微信小程序?一站传媒:公司微信小程序搭建制作真的那么重要吗?据业内人士透露,今朝,小程序天天以23000多的速率连续增加了近一个月,为什么小程序受到云云多的商家追捧。小程序真的那么紧……你们的手机壁纸有什么特殊的意义吗?我的壁纸,最敬爱的人!上一个回答一直处于审核状态,所以再次过来回答这个问题,因为这个问题大脸君有很多想说的话。手机已是我们现在生活当中不可或缺的重要物品之一,我们每……请问哪位大佬有华为mate20Pro能用的曲面屏壁纸?曲面屏壁纸救星来啦之前发了许多全面屏刘海屏挖孔屏还有水滴屏的专属壁纸,想要的可以点击头像进入主页自取!因为是回答问题每张图片都会有水印,想要可以评论区留言,今晚就可……华为鸿蒙OS2正式发布相关合作伙伴有望受益6月2日晚间,华为正式发布了HarmonyOS2(简称鸿蒙OS2。0),该系统面向物联网,可实现智能家居、智慧办公、智慧出行、运动健康、影音娱乐5大生活场景的全连接和控制。期间……一天烧掉一个亿,掀翻整个快递市场,极兔快递为何如此嚣张?网购对于我们并不陌生,因为它已经成为人们生活中不可或缺的一部分,在互联网经济红利的催化下,诞生了无数家独角兽企业,同时垄断着整个快递行业,例如顺丰快运、菜鸟网络、滴滴货运等,但……1070显卡玩绝地求生,为什么还是卡?如果你觉得1070显卡玩绝地求生卡,那你一定是早期的玩家,现在随着《绝地求生》正式版1。0版本的更新。游戏在微软和NVIDIA的帮助下进行了长时间优化。而在游戏上线之前,NVI……如何正确看待助听器的效果?我们要客观正确地了解助听器。听力障碍者对选配的助听器期望值过高。认为助听器戴上以后,就可以马上恢复正常的听力了。这样就会影响佩戴者对助听器的适应和使用。刚刚戴助听器,就觉……还是来了!特斯拉正式启用座舱摄像头,发布司机监控系统还是来了!特斯拉正式启用座舱摄像头,发布司机监控系统李星近日特斯拉发布了司机监控系统,该系统将调用安装在汽车驾驶室的座舱摄像头Cabincamera,以确保司机在开……红旗EHS9,新能源赛道E往无前红旗EHS9上市后在新能源这条赛道上有不俗的表现。新能源还是全尺寸SUV,其实说到这儿呢就有很多兄弟来精神了,今天跟大家谈谈我对这个车的一些看法。刚听到这个名字的时候想必……Z系列都这么猛了?iQOOZ5引发的一个小思考笔者是一名数码爱好者,对手机甚是喜欢,它能够给人们带来诸多便捷。从最初的触摸屏就非常的好奇,再到NFC刷地铁等等,这些都非常的有趣。国产手机可谓发展飞快,从最初期待的功能,到现……
售价2499起!小米平板5pro速览这是一块11的大屏幕,却拥有2。5K超清晰显示,支持HDR1O,每一处细节都细腻养眼,多达1O亿色的真彩显示,为你真实还原天地间的缤纷多彩。轻盈机身,纤薄设计骁龙8……互联网灵活就业最近听到越来越多灵活就业的信息,根据国家最新统计的结果已经有2亿人属于灵活就业的范畴。灵活就业具体的形式划分不去细究,只是针对这种现象的大规模出现,确实是在近几年趁着互联……科技进步法明年起实施国家实验室首次落实入法科学技术进步法(下称科技进步法)的修订近日正式审议通过,并将于明年1月1日起实施。第一财经记者注意到,包括国家实验室在内的新体系首次正式写入法律。业内人士向第一财经记者表……张红雷中兴通讯?白刃战?NO。这只是王者归来,再展雄风张红雷:中兴通讯?2C白刃战?NO,NO,NO。这是王者归来,再展雄风。近期中兴手机官方微博公布了中兴Axon30屏下版首销战报。斩获了京东安卓手机单品销量第一、天猫安卓……元宇宙大概率元宇宙大概率是下一轮经济发展主线,10年后人类社会可能会全面进入万物互联、智能化、虚拟现实,进入曾经的科幻世界,到时候已经进入6G,星链互联网,为万物互联提供基础设施,因此芯片……小米世界第二还不舒服?雷军这是高级凡尔赛,苹果不想要给我最近,小米试制了一档节目叫《雷军请你超大杯》,在节目中雷军请到了戏剧导演孟京辉一起喝咖啡,一起谈天说地。从当前小米发布的预告来看,双方谈论的尺度可以说是非常大了,雷总也是……京东无货源开店,找对选品思路很重要互联网的发展带动了电商行业的进步,大量的电商平台在这几年都得到了较好的发展。网赚成为了现在人们热门的创业项目,而无货源的运营模式也逐渐成为了一种网赚特色,从而吸引到了很多创业者……互联网公司大比例裁员有你家的没有年底裁员潮来临,靠烧钱狂涨业务的一个也少不了。互联网的裁员首当其冲,互联网企业的本质是广告公司,广告主日子都不好过了,广告公司能好吗?1、百度无人驾驶部门大面积裁员,比例……人口老龄化加速,运营商5G建设助力智慧养老来源:通信信息报社(记者唐刚)备受关注的第七次全国人口普查数据近日出炉,统计数据表明,我国目前已进入中度老龄化阶段,老龄化成为今后一段时期我国的基本国情。面对不断增……三星联合iFixit支持Galaxy用户自行维修手机品玩4月1日讯,据网易科技报道,三星宣布,将与iFixit建立新的合作伙伴关系,允许部分Galaxy旗舰设备由用户自行维修。据悉,三星将会提供正品零件、维修工具和维修指南……Edge新特性新增迷你右键菜单内置在线词典优化密码监控基于Chromium的新版Edge浏览器在近日的更新中,终于迁移了经典版Edge浏览器中的在线字典功能。此外在最新版本中,微软似乎正在开发迷你版右键菜单,并对密码监控工具进行改……液晶电视挑选关于液晶电视挑选不吐不快。早年间的大屁股crt电视,十年前的ccfl液晶电视,到现在的led液晶电视,都用过拥有过,这些年通过使用和反思,总结的结果就是,画面效果是第一位首选。……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网