Python爬虫必学数据库:MongoDB

微信公众号:愤怒的it男,超多Python技术干货文章。

MongoDB由C++编写而成,是免费开源跨平台的非关系型数据库,与关系型数据库不同,MongoDB将数据存储在类似JSON的文档中,这使得数据库非常灵活和可伸缩。

图1

一、环境安装

第一步:需要在MongoDB的官网(https://www.mongodb.com/try/download/community)下载免费的MongoDB安装包。

图2

第二步:安装并启动MongoDB服务。

图3

第三步:需要使用pip命令安装MongoDB驱动程序来访问MongoDB数据库。

pip install pymongo

第四步:在操作MongoDB数据库的Python代码中,需要导入pymongo。

import pymongo

二、常用概念

1、数据库

数据库是用于存储数据的物理容器,每个数据库在文件系统中都有属于自己的文件集。一台MongoDB服务器中可以创建多个数据库,并且每个数据库都是独立的,都有属于自己的集合和权限,而且不同数据库中的数据会放置在不同的文件中。

2、集合

集合就是一组MongoDB文档的组合,类似于关系型数据库(例如 MySQL)中的数据表。集合存在于数据库中,且没有固定的结构,您可以向集合中插入不同格式或类型的数据。

3、文档

文档是MongoDB中数据的基本单位,由BSON格式(一种计算机数据交换格式,类似于JSON)的键/值对组成,类似于关系型数据库中的一行行数据,但要相对复杂一些。文档具有动态模式,同一集合中的文档不需要具有相同的字段,即使是相同的字段也可以是不同的类型。

4、概念差异

图4

5、优点好处

这种文档型数据存储方式有几个好处:

  1. 文档的数据类型可以对应到语言的数据类型,如数组类型(Array)和对象类型(Object);

  2. 文档之间可以嵌套,有时关系型数据库涉及几个表的操作,在MongoDB中一次就能完成,可以减少昂贵的连接花销;

  3. 文档不对数据结构加以限制,不同的数据结构可以存储在同一个集合中。

三、创建数据库和集合

1、创建数据库

import pymongo
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["mydatabase"]

2、创建集合

import pymongo
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["mydatabase"]
mycol = mydb["customers"]

3、删除集合

import pymongo
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["mydatabase"]
mycol = mydb["customers"]
mycol.drop()

三、增删改查操作

1、增加文档(Insert)

  • 插入一个文档

insert_one()方法返回InsertOneResult对象,该对象拥有属性inserted_id,用于保存插入文档的id。如果没有指定_id字段,MongoDB将为每个文档分配一个唯一的ID。

import pymongo
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["mydatabase"]
mycol = mydb["customers"]
mydict = { "_id": 1, "platform": "微信公众号", "name": "愤怒的it男", "introduce": "人生苦短,Python是岸!" }
x = mycol.insert_one(mydict)
print(x.inserted_id)
  • 插入多个文档

insert_many()方法返回InsertManyResult对象,该对象拥有属性inserted_ids,用于保存被插入文档的id。如果没有指定_id字段,MongoDB将为每个文档分配一个唯一的ID。

import pymongo
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["mydatabase"]
mycol = mydb["customers"]
mylist = [
  { "_id": 1, "platform": "微信公众号", "name": "愤怒的it男", "introduce": "人生苦短,Python是岸!" },
  { "_id": 2, "platform": "微信公众号", "name": "angry_it_man", "introduce": "人生苦短,Python是岸!" },
  { "_id": 3, "platform": "CSDN", "name": "愤怒的it男", "introduce": "人生苦短,Python是岸!" },
  { "_id": 4, "platform": "知乎", "name": "愤怒的it男", "introduce": "人生苦短,Python是岸!" },
  { "_id": 5, "platform": "稀土掘金", "name": "愤怒的it男", "introduce": "人生苦短,Python是岸!" },
  { "_id": 6, "platform": "bilibili", "name": "愤怒的it男", "introduce": "人生苦短,Python是岸!" },
]
x = mycol.insert_many(mylist)
print(x.inserted_ids)

2、删除文档(Delete)

  • 删除一个文档

delete_one()方法的参数是query对象。

import pymongo
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["mydatabase"]
mycol = mydb["customers"]
myquery = { "platform": "bilibili" }
mycol.delete_one(myquery)
  • 删除多个文档

delete_many()方法的参数是query对象。

import pymongo
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["mydatabase"]
mycol = mydb["customers"]
myquery = { "platform": "微信公众号"} 
x = mycol.delete_many(myquery)
print(x.deleted_count, " documents deleted.")
  • 删除所有文档
import pymongo
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["mydatabase"]
mycol = mydb["customers"]
x = mycol.delete_many({})
print(x.deleted_count, " documents deleted.")
  • query对象

图5

3、修改文档(Update)

  • 修改一个文档

update_one()方法的第一个参数是query对象,第二个参数是定义文档新值的对象。

import pymongo
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["mydatabase"]
mycol = mydb["customers"]
myquery = { "platform": "bilibili"}
newvalues = { "$set": { "introduce": "欢迎关注微信公众号:愤怒的it男" } }
mycol.update_one(myquery, newvalues)
  • 修改多个文档

update_many()方法的第一个参数是query对象,第二个参数是定义文档新值的对象。

import pymongo
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["mydatabase"]
mycol = mydb["customers"]
myquery = { "platform": {"$ne":"bilibili"}}
newvalues = { "$set": { "introduce": "欢迎关注微信公众号:愤怒的it男" } }
mycol.update_many(myquery, newvalues)

4、查询文档(Find)

  • 查找一个文档

find_one()方法的第一个参数是query对象,第二个参数是描述包含在结果中字段的对象。

第二个参数不允许同时指定0和1值(除非其中一个字段是_id字段)。如果指定值为0的字段,则所有其他字段的值为1,反之亦然。

import pymongo
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["mydatabase"]
mycol = mydb["customers"]
myquery = { "platform": "微信公众号"}
x = mycol.find_one(myquery,{ "_id": 0, "platform": 1, "name": 1 })
print(x)
  • 查找多个文档

find()方法的第一个参数是query对象,第二个参数是描述包含在结果中字段的对象。

第二个参数不允许同时指定0和1值(除非其中一个字段是_id字段)。如果指定值为0的字段,则所有其他字段的值为1,反之亦然。

import pymongo
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["mydatabase"]
mycol = mydb["customers"]
myquery = { "platform": {"$ne":"bilibili"}}
for x in mycol.find(myquery,{ "_id": 0, "platform": 1, "name": 1 }):
  print(x)

五、其他高级操作

1、排序文档(Sort)

sort()方法的第一个参数是字段名称,第二个参数是方向(默认升序)。

import pymongo
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["mydatabase"]
mycol = mydb["customers"]
mydoc = mycol.find().sort("_id", -1)
for x in mydoc:
  print(x)

2、限定文档(Limit)

limit()方法接受一个参数,定义的数字表示返回的文档数。

import pymongo
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["mydatabase"]
mycol = mydb["customers"]
myresult = mycol.find().limit(4)
for x in myresult:
  print(x)

微信公众号:愤怒的it男,超多Python技术干货文章。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

开放平台系统架构设计

一、概述 背景与目标 本开放平台旨在构建一个可扩展、高可用的生态体系,通过提供统一标准的API接口和SDK工具包,让第三方开发者能够安全、高效地接入我们的服务和资源,实现业务的互联互通。 定位与功能描述 系统主要包含用户认证授权、资…

TS2307: Cannot find module ‘./App.vue‘ or its corresponding type declarations.

目录 1. 问题描述2. 解决方案一:VSCode Volar(官方推荐)3. 解决方案二:WebStorm 2023.2 (官方推荐)4. 解决方案三:禁用严格类型检查选项(不推荐)5. 解决方案四&#xff…

Power BI - 5分钟学习修改数据类型

每天5分钟,今天介绍Power BI修改数据类型 Power BI加载数据时,会尝试将源列的数据类型转换为更高效的存储、计算和数据可视化的数据类型。 例如,如果从Excel导入的值的列没有小数值,Power BI Desktop会将整个数据列转换为整数数据…

Spring学习之——事务控制

Spring中的事务控制 说明: JavaEE体系进行分层开发,事务处理位于业务层,Spring提供了分层设计业务层的事务处理解决方案。 Spring框架为我们提供了一组事务控制的接口。具体在后面的小节介绍。这组接口是在spring-tx.RELEASE.jar中。 spri…

软件测试|如何在Pycharm中配置文件头部信息

简介 PyCharm是一款功能强大的Python集成开发环境(IDE),在开发过程中,我们经常需要在代码文件的开头添加固定的文件说明信息,例如版权声明、作者信息、创建日期等。手动添加这些信息可能会很繁琐,但是PyCh…

【51单片机系列】串口通信模块

文章目录 一、计算机串行通信基础二、串行通信的基本概念2.1、异步通信与同步通信2.2、串行通信的传输方向2.3、串行通信常见的错误校验2.4、传输速率 三、串行通信接口标准3.1、RS-232C接口3.2、RS-422A3.3、RS-485接口 四、80C51的串行口4.1、80C51串行口的控制寄存器4.2、80…

数集 - 240109 - 数集期末速成

TAG - 数集、期末、速成 数集、期末、速成 数集、期末、速成 复习提纲 1、静态逻辑设计和晶体管尺寸设计 2、逻辑组合速度估算 3、传输门规则和设计、动态pmos,nmos设计及输出波形 4、第三章涉及的工艺流程 5、时序电路的时序分析 6、全加器和乘法器设计 7、非挥发存储单…

给自己创建的GPTs添加Action(查天气)

前言 在这篇文章中,我将分享如何利用ChatGPT 4.0辅助论文写作的技巧,并根据网上的资料和最新的研究补充更多好用的咒语技巧。 GPT4的官方售价是每月20美元,很多人并不是天天用GPT,只是偶尔用一下。 如果调用官方的GPT4接口&…

redo,binlog的两阶段提交

回顾流程 执行更新语句 UPDATE t_user SET name xiaolin WHERE id 1; 执行器负责具体执行,会调用存储引擎的接口,通过主键索引树搜索获取 id 1 这一行记录: 如果 id1 这一行所在的数据页本来就在 buffer pool 中,就直接返回…

【网络技术】【Kali Linux】Wireshark嗅探(七)超文本传送协议(HTTP)

一、实验目的 本次实验使用Wireshark流量分析工具进行网络嗅探,旨在了解超文本传送协议(HTTP)的工作原理。 二、HTTP协议概述 超文本传送协议( H yper T ext T ransfer P rotocol, HTTP)是互联网应用层的一个重要协…

Prometheus实战篇:Prometheus监控mongodb

Prometheus实战篇:Prometheus监控mongodb 准备环境 docker-compose安装mongodb docker-compose.yaml version: 3 services:mongo:image: mongo:4.2.5container_name: mongorestart: alwaysvolumes:- /data/mongo/db: /data/dbport:- 27017:27017command: [--auth]enviromen…

索引、映射、文档

一个索引就是一个拥有几分相似特征的文档的集合,索引必须全部是小写字母的。 映射是定义一个文档和它所包含的字段如何被存储和索引的过程。 文档就是索引中存储的一条条数据。 通俗来理解就是:索引就是数据库中的表,而映射就是定义表时的…

IDEA 常用快捷键大全(建议收藏)

代码开发时 常用快捷键 快捷键功能使用建议CtrlAltOOptimize imports 比较实用 去除导入的无用的包CtrlAltIAuto-indent line(s) 比较实用 自动缩进代码CtrlAltLReformat code 比较实用 格式化选中的代码CtrlAltShiftL 比较实用 格式化整个文件TabIndent 比较实用 缩进Sh…

QT qss文件设置样式

方式一 (单个) 方式二 (全局) 所有按钮都会采用这个样式。 方式三 (qss文件) 创建资源文件 创建qss文件(Button.qss) 引用qss文件 QApplication a(argc, argv);QString qss;QFile…

智汇云舟受邀出席《城市轨道交通公共安全防范安全评价标准》专家评审会

1月3日,由中国城市公共交通协会归口的《城市轨道交通公共安全防范安全评价标准》(以下简称“《标准》”)送审稿审查会顺利召开。该标准由同方威视技术股份有限公司、上海新海信通信息技术有限公司和中安保实业集团有限公司主编,北…

程序设计与计算机系统 第3、4章

一、 生成汇编文件 .s :gcc -O1 -S code.c 生成机器码文件 .o :gcc -O1 -c code.c 生成可执行文件 : gcc -O1 -o code.c main.c 反汇编: objdump -d code.o 同一段代码。单个文件生成的.o文件的反汇编码和链接后可执行程序的反汇编码一致&…

Python 面向对象之元类

Python 面向对象之元类 【一】一切皆对象 【1】元类 元类(metaclass)是Python中用于创建类的类。在Python中,类是对象,而元类就是类的类它们控制类的创建过程,允许你定制类的行为Python中内置的默认元类是type我们用…

如果需求不完整或模糊,如何进行功能点估算?

在项目早期进行功能点估算,经常会遇到需求不完整或模糊的情况。这让人无法准确理解用户需求,这会增加项目本身的风险,对功能点估算也造成影响,可能会影响到项目的规模和工作量。因此在遇到此种情况,一般可以采取如下措…

linux线程重启

以下是获取线程id和重启指定线程的示例代码&#xff1a; #include <stdio.h> #include <pthread.h>// 线程函数&#xff0c;用来打印线程ID void *print_thread_id(void *arg) {printf("Thread ID: %lu\n", pthread_self());return NULL; }int main() {…

【VRTK】【Unity】【VR开发】Linear Drives

课程配套学习项目源码资源下载 https://download.csdn.net/download/weixin_41697242/88485426?spm=1001.2014.3001.5503 【概述】 前面一篇讨论了角度运动机制,本篇讨论线性运动机制。和角度运动机制类似,线性运动机制提供了更为仿真的互动机制。也分为基于物理的和不基于…