mysql数据存储方式_数据存储在mysql的两种方式
数据存储在mysql的两种方式
发布时间:2020-05-12 16:16:25
来源:亿速云
阅读:250
作者:三月
下文主要给大家带来数据存储在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 MySQLdb
import MySQLdb.cursorsfrom twisted.enterprise
import 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的两种方式,大家是不是觉得非常有帮助。如果需要了解更多内容,请继续关注我们的行业资讯,相信你会喜欢上这些内容的。
mysql数据存储方式_数据存储在mysql的两种方式相关推荐
- 运用python的方式_对Python使用mfcc的两种方式详解
1.Librosa import librosa filepath = "/Users/birenjianmo/Desktop/learn/librosa/mp3/in.wav" ...
- 第四章:数据存储-csv文件处理-读取csv文件的两种方式
直接学习:https://edu.csdn.net/course/play/24756/280718 csv文件处理-读取csv文件的两种方式: # 这种方式读取到的每一条数据是个列表,所以需要通过下 ...
- core webapi缩略图_.Net Core WebApi上传图片的两种方式
我这边主要是为了上传图片,话不多说,上代码. 方式一:通过Form表单上传 后端: /// /// 上传图片,通过Form表单提交 /// /// [Route("Upload/FormIm ...
- java声明异常必须抛出吗_简述java中抛出异常的两种方式
java编程中经常遇到异常,这时就需要利用java中的异常抛出机制,在java中提供了两种抛出异常的方法:try{} catch() {}和throw. 一.抛出异常的两种方式 (1) 首先我们来看 ...
- kafka修改分区数_大数据技术:解析SparkStreaming和Kafka集成的两种方式
Spark Streaming是基于微批处理的流式计算引擎,通常是利用Spark Core或者Spark Core与Spark Sql一起来处理数据.在企业实时处理架构中,通常将Spark Strea ...
- 传统存储方式_相机传到手机的3种方式,没WiFi的相机也能用
支持WiFi的相机,可以通过无线传输到手机中进行分享使用.那么不支持WiFi功能的大部分相机,该如何把照片传到手机上呢? 小编分享3招给大家,这3招基本适合目前的所有相机类型和品牌,下面就各自优劣进行 ...
- python程序设计语言的执行方式_编程语言用Python执行程序的4种方式
在编写代码中,经常会遇到在 Python程序中打开外部程序的需求,那么在Python里如何打开外部程序呢?今天我们来介绍四种不同的方式,供大家参考收藏. 使用 os.system() os.syste ...
- php虚线_实现css虚线样式的两种方式:dotted和dashed(实例)
css虚线边框怎么做?html虚线边框设置一般会想到border的solid,html网页布局中solid用的概率最高了,要有css虚线的效果还可以用图片做背景,但是不推荐,尽量使用css虚线样式做这 ...
- mysql修改数据库级别_设置数据库兼容级别的两种方法
兼容级别设置为 80 兼容级别设置为 90 影响的可能性 对于 FROM 子句中的锁提示,WITH 关键字始终是可选的. 但在一些例外情况中,仅当用 WITH 关键字指定表提示时,FROM 子句中才支 ...
- token 生成有哪几种常用方式_实现一个线程有哪几种方式,各有什么优缺点,比较常用的是那种?...
(1) 问题分析 面试官考核的是线程创建方式及优缺点 (2) 核心答案讲解 1.继承Thread类 2.实现Runnable接口 3.实现Callable接口 4.线程池方式 优缺点 1.继承Thre ...
最新文章
- zookeeper在搭建的时候,解决后台启动为standalone模式问题
- linux 安装 nodejs
- html怎么随机放图片,HTML技术:如何在网页中图片的随机显示
- 201803-2碰撞的小球
- solaris系统关闭服务器,solaris系统中关闭和开启系统服务ftp,telnet,ssh,sendmail...
- 阿里安全图灵实验室再次刷新世界顶级算法比赛成绩
- android studio 导入项目卡死,AndroidStudio导入新项目一直卡在Building gradle project info...
- javascript --- 手写Promise、快排、冒泡、单例模式+观察者模式
- Codeforces Round #594 (Div. 2) C. Ivan the Fool and the Probability Theory 思维 + dp
- 管理者必看!深度剖析BI与数据仓库,企业能否成功转型就看它
- Tsung压力测试工具的搭建和使用,配置。
- websocket 聊天室 demo ( tornado + nginx + wss + 在线demo)
- windows修改用户文件夹名称 更改用户名 修改C盘Users目录下文件夹名称
- ESP8266-Arduino编程实例-SHT20温湿度传感器驱动
- 初步认识Apache Ignite
- 如何顺利通过c语言补考,大学里补考比考试难的学科,不想挂科最好认真学,尤其大一新生...
- BJOI2019 勘破神机 新解
- org.apache.thrift.transport.TTransportException: GSS initiate failed
- CNCERT:2012年中国互联网网络安全态势综述
- NASA准备在2021年推出最大望远镜!哈佛用棉花糖机造“肉”?
热门文章
- vs2010 出错:error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
- 在ZC702上运行Linux(4)-编译和使用U-Boot Linux
- swift4.2 - 一个自定义view弹框
- TCP协议的三次握手、四次挥手
- Python-day06-2018.7.9_编码以及小知识点补充
- WinForm 数据库无限填充树目录 treeView
- NFS客户端、服务器协商读写粒度(rsize、wsize)流程 【转】
- outlook恢复已删除邮件
- Intent打开各种类型的文件
- rhel5下限值用户使用su切换身份