使用ORM模型操作MySQL数据库:Python爬虫数据持久化实践

源码分享
https://docs.qq.com/sheet/DUHNQdlRUVUp5Vll2?tab=BB08J2

在Python爬虫开发中,数据持久化是一个重要的步骤。通常,我们会将爬取的数据保存到数据库中。本篇博客将介绍如何使用对象关系映射(ORM)模型在Python中操作MySQL数据库,以便更加高效和安全地管理爬虫数据。

ORM简介

ORM即对象关系映射,它是一种数据库抽象技术,使得开发者能够以编程语言中的对象的方式来操作数据库。Python社区中流行的ORM框架有SQLAlchemy和Django ORM等。

SQLAlchemy入门

SQLAlchemy是Python中最著名的ORM工具之一,它提供了强大的数据库操作能力。以下是如何使用SQLAlchemy操作MySQL数据库的详细步骤。

安装必要库

首先,确保已经安装了​​SQLAlchemy​​和MySQL的Python适配器,例如​​mysql-connector-python​​:

pip install sqlalchemy mysql-connector-python

定义模型

定义一个模型,它映射到MySQL数据库中的一个表。例如,如果您的爬虫正在爬取书籍信息,您可能会有一个模型如下:

from sqlalchemy import create_engine, Column, Integer, String, Float
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker# 定义基类
Base = declarative_base()# 定义Book模型,它对应于MySQL中的一个表
class Book(Base):__tablename__ = 'books'  # 数据库中表的名字id = Column(Integer, primary_key=True)title = Column(String(200))author = Column(String(100))ratings = Column(Float)def __repr__(self):return f"<Book(title={self.title}, author={self.author}, ratings={self.ratings})>"

连接数据库

创建一个与MySQL数据库的连接,并建立一个Session来操作数据库。

# 创建连接到数据库的引擎
engine = create_engine('mysql+mysqlconnector://user:password@localhost:3306/dbname')# 创建所有表(如果它们还不存在)
Base.metadata.create_all(engine)# 创建Session类
Session = sessionmaker(bind=engine)# 创建实际的Session对象
session = Session()

请将​​user​​, ​​password​​, ​​localhost​​, ​​3306​​和​​dbname​​替换为实际的MySQL连接参数。

操作数据库

现在可以通过创建模型的实例来插入新记录,通过查询来获取数据,通过修改模型实例来更新记录,或者删除记录。

# 插入新书籍
new_book = Book(title="Python编程:从入门到实践", author="Eric Matthes", ratings=4.5)
session.add(new_book)
session.commit()# 查询书籍数据
books = session.query(Book).filter_by(author="Eric Matthes").all()
for book in books:print(book)# 更新书籍数据
book_to_update = session.query(Book).get(1)  # 假设id为1的书籍存在
if book_to_update:book_to_update.ratings = 4.7session.commit()# 删除书籍数据
book_to_delete = session.query(Book).get(1)
if book_to_delete:session.delete(book_to_delete)session.commit()

结语

ORM提供了一种方便的方式来操作数据库,使得数据库操作更加直观和安全。在爬虫项目中,使用ORM可以提高代码的可读性和可维护性,并且有助于避免SQL注入这样的安全问题。本篇博客介绍了如何使用SQLAlchemy框架与MySQL交互,希望能帮助你在接下来的爬虫项目中更高效地处理数据。

使用ORM模型操作数据库是现代Web开发的最佳实践之一,而在爬虫开发中同样适用。始终记住,每一个爬虫都应当负责任地对待数据和网络资源。祝您的爬虫项目顺利!

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

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

相关文章

Redis的数据类型与示例演示

目录 一、KEY操作 1.1 相关命令 说明&#xff1a; 1.2示例演示 二、String类型 2.1 结构图 2.2 示例演示 三、List类型 3.1 结构图 3.2 相关命令 3.3 示例演示 四、SET类型 4.1 结构图 4.2 相关命令 4.3 示例演示 五、ZSET类型 5.1 结构图 5.2 相关命令 六、…

NumPy基础之花式索引

1 NumPy基础之花式索引 NumPy的花式索引(Fancy indexing)指ndarray数组使用整数数组进行索引。这的整数数组可以是python的列表等可迭代对象&#xff0c;也可以是NumPy数组。 花式索引&#xff0c;用整数数组的元素作为对应轴的索引&#xff0c;并且按数组元素顺序选取子集。…

负载均衡SLB

1. 什么是阿里云上的负载均衡SLB&#xff1f;它的主要功能是什么&#xff1f; 阿里云上的负载均衡SLB是一种流量分发服务&#xff0c;它的主要功能是扩展应用系统的吞吐能力和提升系统可用性。 负载均衡SLB&#xff08;Server Load Balancer&#xff09;在阿里云中是一个核心…

useEffect的4种使用情况

useeffect的用法是&#xff1a;useEffect就是指定一个副效应函数&#xff0c;组件每渲染一次&#xff0c;该函数就自动执行一次。组件首次在网页 DOM 加载后&#xff0c;副效应函数也会执行。 useEffect使用时有以下4种情况 1、不传递 useEffect不传递第二个参数会导致每次渲染…

【Spring连载】使用Spring Data访问Redis(十一)----Redis事务 Transactions

【Spring连载】使用Spring Data访问Redis&#xff08;十一&#xff09;----Redis事务 Transactions Transactional 支持 Redis通过multi, exec 和 discard命令为事务提供支持。RedisTemplate上提供了这些操作。但是&#xff0c;RedisTemplate不能保证使用相同的连接运行事务中的…

C#上位机与三菱PLC的通信02--MC协议介绍

1、协议介绍 三菱 PLC MC 协议是一种用于三菱 PLC 与上位机之间进行数据通信的协议&#xff0c;也称为 Mitsubishi Communication Protocol。该协议支持串口、以太网等多种通讯方式&#xff0c;可实现实时数据的采集和交换。三菱PLC的MC协议是一种数据通信协议&#xff0c;它用…

Bootstrap5 响应式导航栏

Bootstrap5 响应式导航栏 我们可以使用 Bootstrap5 导航栏组件为网站或应用程序创建响应式导航标题。 这些响应式导航栏在手机等小视口的设备上会折叠&#xff0c;但当用户单击切换按钮时会展开。 但是&#xff0c;它在中型和大型设备&#xff08;例如笔记本电脑或台式机&#…

考研数据结构笔记(4)

链表&#xff08;链式存储&#xff09; 单链表定义基本操作的实现单链表的插入按位序插入指定节点的前插指定节点的后插 单链表的删除 小结 单链表 定义 顺序表优点:可随机存取&#xff0c;存储密度高&#xff0c;缺点:要求大片连续空间&#xff0c;改变容量不方便。 单链表优…

中科星图——如何利用中科星图智脑引擎来下载0.5米分辨率的高清遥感影像

简介 如何利用中科星图智脑引擎来下载0.5米分辨率的高清遥感影像,这里我们一旦您有GEE的基础那么还是非常好的接入到这个平台当中的,所以这里我们依旧是使用的JavaScript语言来进行编程,地球计算器-地球编程 (geovisearth.com) 这里有一个好处是这里的函数我们可以直接悬浮…

1898_野火FreeRTOS教程阅读笔记_链表操作

1898_野火FreeRTOS教程阅读笔记_链表操作 全部学习汇总&#xff1a; g_FreeRTOS: FreeRTOS学习笔记 (gitee.com) 新的节点的插入&#xff0c;影响到的是链表中最后一个元素的后继以及当前被插入元素的前驱、后继以及归属属性。具体的操作效果为&#xff1a;新的节点更新自己的前…

请解释Java中的设计模式,并举例说明一个常用的设计模式

请解释Java中的设计模式&#xff0c;并举例说明一个常用的设计模式 在Java中&#xff0c;设计模式是一种被广泛采用的解决特定问题的可复用方案。设计模式提供了一套经过验证的解决方案&#xff0c;可以帮助开发人员解决常见的软件设计问题&#xff0c;提高代码的可维护性、可…

2 月 7 日算法练习- 数据结构-树状数组

树状数组 lowbit 在学习树状数组之前&#xff0c;我们需要了解lowbit操作&#xff0c;这是一种位运算操作&#xff0c;用于计算出数字的二进制表达中的最低位的1以及后面所有的0。 写法很简单&#xff1a; int lowbit&#xff08;int x&#xff09;&#xff5b;return x &am…

51单片机精进之路-1点亮led灯

本例中led灯使用共阳极连接在电路中&#xff0c;共阳极即将led的正极接在一起&#xff0c;通过上拉电阻接到电源正极&#xff0c;通过单片机io与Led的负极相连&#xff0c;io输出低电平&#xff0c;有电流从led流过&#xff0c;此时led点亮&#xff0c;当io输出高电平时&#x…

leetcode-206-翻转链表

对于链表来说&#xff0c;->next就是代表图上的那个箭头&#xff0c;指向后&#xff0c;就相当于已经建立完链接&#xff0c;就可以改变只想节点的指针的位置了 每一个指针&#xff0c;则是代表一个圈 一 解题 方法一&#xff1a;迭代 假设链表为 1→2→3→∅1 \rightar…

2024.02.08

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget) {ui->setupUi(this);this->setWindowIcon(QIcon(":/zh.png"));ui->lineEdit->setPlaceholderText("账号/手…

VSCode 文件夹增加右键打开

按照以下步骤操作即可 按下Win R组合键输入"regedit"并按回车&#xff0c;打开注册表编辑器。在注册表编辑器的左侧找到&#xff1a;计算机\HKEY_CLASSES_ROOT\Directory\shell这个路径&#xff0c;在shell下右键新建>项&#xff0c;将其命名为"VSCode&quo…

WordPress Plugin HTML5 Video Player SQL注入漏洞复现(CVE-2024-1061)

0x01 产品简介 WordPress和WordPress plugin都是WordPress基金会的产品。WordPress是一套使用PHP语言开发的博客平台。该平台支持在PHP和MySQL的服务器上架设个人博客网站。WordPress plugin是一个应用插件。 0x02 漏洞概述 WordPress Plugin HTML5 Video Player 插件 get_v…

Python进阶--爬取美女图片壁纸(基于回车桌面网的爬虫程序)

目录 一、前言 二、爬取下载美女图片 1、抓包分析 a、分析页面 b、明确需求 c、抓包搜寻 d、总结特点 2、编写爬虫代码 a、获取图片页网页源代码 b、提取所有图片的链接和标题 c、下载并保存这组图片 d、 爬取目录页的各种类型美女图片的链接 e、实现翻页 三、各…

ZooKeeper安装及配置(Windows版)

步骤&#xff1a; 1.官网下载二进制版本ZooKeeper安装包。 2.解压到你要安装的目录下 3.配置 3.1进入目录 D:\Install\apache-zookeeper-3.9.1-bin 新增两个文件夹&#xff1a;data和log 3.2 进入目录D:\Install\apache-zookeeper-3.9.1-bin\conf 复制zoo_sample.cfg文件&a…

可选链语法?.

可选链运算符&#xff08;?.&#xff09;允许读取位于连接对象链深处的属性的值&#xff0c;而不必明确验证链中的每个引用是否有效。?. 运算符的功能类似于 . 链式运算符&#xff0c;不同之处在于&#xff0c;在引用为空 (nullish ) (null 或者 undefined) 的情况下不会引起…