数据存储在mysql的两种方式
发表于:2025-11-06 作者:千家信息网编辑
千家信息网最后更新 2025年11月06日,下文主要给大家带来数据存储在mysql的两种方式,希望这些内容能够带给大家实际用处,这也是我编辑数据存储在mysql的两种方式这篇文章的主要目的。好了,废话不多说,大家直接看下文吧。一般将数据保存到M
千家信息网最后更新 2025年11月06日数据存储在mysql的两种方式
下文主要给大家带来数据存储在mysql的两种方式,希望这些内容能够带给大家实际用处,这也是我编辑数据存储在mysql的两种方式这篇文章的主要目的。好了,废话不多说,大家直接看下文吧。
一般将数据保存到MySQL中有两种方式,同步模式和异步模式。
同步模式
同步模式是采用SQL语句,将数据插入到数据库中。但是要注意的是Scrapy的解析速度要远大于MySQL的入库速度,当有大量解析的时候,MySQL的入库就可能会阻塞。
import MySQLdbclass MysqlPipeline(object): def __init__(self): self.conn = MySQLdb.connect('127.0.0.1','root','root','article_spider',charset="utf8",use_unicode=True) self.cursor = self.conn.cursor() def process_item(self, item, spider): insert_sql = """ insert into jobbole_article(title,create_date,url,url_object_id) VALUES (%s,%s,%s,%s) """ self.cursor.execute(insert_sql,(item["title"],item["create_date"],item["url"],item["url_object_id"])) self.conn.commit()异步模式
采用同步模式可能会产生阻塞,我们可以使用Twisted将MySQL的入库和解析变成异步操作,而不是简单的execute,commit同步操作。

关于MySQL的配置,我们可以直接在配置文件配置数据库:
MYSQL_HOST = "127.0.0.1"MYSQL_DBNAME = "article_spider"MYSQL_USER = "root"MYSQL_PASSWORD = "root"
在settings中的配置,我们通过在pipeline中定义from_settings获取settings对象,可以直接获取settings配置文件中的值。
使用Twisted提供的异步容器连接MySQL:
import MySQLdbimport MySQLdb.cursorsfrom twisted.enterpriseimport adbapi
使用adbapi可以使mysqldb的一些操作变成异步化的操作
使用cursors进行sql语句的执行和提交
代码部分:
class MysqlTwistedPipline(object): def __init__(self,dbpool): self.dbpool = dbpool @classmethod def from_settings(cls,settings): dbparms = dict( host = settings["MYSQL_HOST"], db = settings["MYSQL_DBNAME"], user = settings["MYSQL_USER"], passwd = settings["MYSQL_PASSWORD"], charset = 'utf8', cursorclass = MySQLdb.cursors.DictCursor, use_unicode=True, ) dbpool = adbapi.ConnectionPool("MySQLdb",**dbparms) return cls(dbpool) def process_item(self, item, spider): #使用Twisted将mysql插入变成异步执行 #runInteraction可以将传入的函数变成异步的 query = self.dbpool.runInteraction(self.do_insert,item) #处理异常 query.addErrback(self.handle_error,item,spider) def handle_error(self,failure,item,spider): #处理异步插入的异常 print(failure) def do_insert(self,cursor,item): #会从dbpool取出cursor #执行具体的插入 insert_sql = """ insert into jobbole_article(title,create_date,url,url_object_id) VALUES (%s,%s,%s,%s) """ cursor.execute(insert_sql, (item["title"], item["create_date"], item["url"], item["url_object_id"])) #拿传进的cursor进行执行,并且自动完成commit操作以上代码部分,除了do_insert之外,其它均可复用。
对于以上关于数据存储在mysql的两种方式,大家是不是觉得非常有帮助。如果需要了解更多内容,请继续关注我们的行业资讯,相信你会喜欢上这些内容的。
数据
模式
同步
配置
方式
存储
内容
下文
代码
数据库
文件
语句
速度
部分
处理
阻塞
函数
可以使
实际
容器
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
具发展潜力的桌面共享软件开发
工业网络安全中心
ill7服务器
计算机网络技术专业介绍书
安徽软件开发技校
长沙市记录爱软件开发有限公司
程序如何提交到服务器运行
大型数据库技术数据库设计
1.在数据库中存储的是
阿里云服务器安装SQL
天津制作游戏软件开发公司
常用的数据库类型
世界最大的软件开发公司
怎么给服务器装硬盘
软件开发提高人效
csgo有几个服务器
手机访问本地服务器
具有文献功能传递的数据库
58同城数据库设计实战
华为k24r-02服务器
redis查看集群数据库
服务器虚拟机6的安装
乌俄战争实时数据库建设
r610服务器多重
网易服务器是什么网络的
晋中软件开发要多少钱
给甲方报的软件开发预算表
数据库查找中含有空格的
HC34900服务器
软件开发公司产品合同