数据存储在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的两种方式相关推荐

  1. 运用python的方式_对Python使用mfcc的两种方式详解

    1.Librosa import librosa filepath = "/Users/birenjianmo/Desktop/learn/librosa/mp3/in.wav" ...

  2. 第四章:数据存储-csv文件处理-读取csv文件的两种方式

    直接学习:https://edu.csdn.net/course/play/24756/280718 csv文件处理-读取csv文件的两种方式: # 这种方式读取到的每一条数据是个列表,所以需要通过下 ...

  3. core webapi缩略图_.Net Core WebApi上传图片的两种方式

    我这边主要是为了上传图片,话不多说,上代码. 方式一:通过Form表单上传 后端: /// /// 上传图片,通过Form表单提交 /// /// [Route("Upload/FormIm ...

  4. java声明异常必须抛出吗_简述java中抛出异常的两种方式

    java编程中经常遇到异常,这时就需要利用java中的异常抛出机制,在java中提供了两种抛出异常的方法:try{}  catch() {}和throw. 一.抛出异常的两种方式 (1) 首先我们来看 ...

  5. kafka修改分区数_大数据技术:解析SparkStreaming和Kafka集成的两种方式

    Spark Streaming是基于微批处理的流式计算引擎,通常是利用Spark Core或者Spark Core与Spark Sql一起来处理数据.在企业实时处理架构中,通常将Spark Strea ...

  6. 传统存储方式_相机传到手机的3种方式,没WiFi的相机也能用

    支持WiFi的相机,可以通过无线传输到手机中进行分享使用.那么不支持WiFi功能的大部分相机,该如何把照片传到手机上呢? 小编分享3招给大家,这3招基本适合目前的所有相机类型和品牌,下面就各自优劣进行 ...

  7. python程序设计语言的执行方式_编程语言用Python执行程序的4种方式

    在编写代码中,经常会遇到在 Python程序中打开外部程序的需求,那么在Python里如何打开外部程序呢?今天我们来介绍四种不同的方式,供大家参考收藏. 使用 os.system() os.syste ...

  8. php虚线_实现css虚线样式的两种方式:dotted和dashed(实例)

    css虚线边框怎么做?html虚线边框设置一般会想到border的solid,html网页布局中solid用的概率最高了,要有css虚线的效果还可以用图片做背景,但是不推荐,尽量使用css虚线样式做这 ...

  9. mysql修改数据库级别_设置数据库兼容级别的两种方法

    兼容级别设置为 80 兼容级别设置为 90 影响的可能性 对于 FROM 子句中的锁提示,WITH 关键字始终是可选的. 但在一些例外情况中,仅当用 WITH 关键字指定表提示时,FROM 子句中才支 ...

  10. token 生成有哪几种常用方式_实现一个线程有哪几种方式,各有什么优缺点,比较常用的是那种?...

    (1) 问题分析 面试官考核的是线程创建方式及优缺点 (2) 核心答案讲解 1.继承Thread类 2.实现Runnable接口 3.实现Callable接口 4.线程池方式 优缺点 1.继承Thre ...

最新文章

  1. zookeeper在搭建的时候,解决后台启动为standalone模式问题
  2. linux 安装 nodejs
  3. html怎么随机放图片,HTML技术:如何在网页中图片的随机显示
  4. 201803-2碰撞的小球
  5. solaris系统关闭服务器,solaris系统中关闭和开启系统服务ftp,telnet,ssh,sendmail...
  6. 阿里安全图灵实验室再次刷新世界顶级算法比赛成绩
  7. android studio 导入项目卡死,AndroidStudio导入新项目一直卡在Building gradle project info...
  8. javascript --- 手写Promise、快排、冒泡、单例模式+观察者模式
  9. Codeforces Round #594 (Div. 2) C. Ivan the Fool and the Probability Theory 思维 + dp
  10. 管理者必看!深度剖析BI与数据仓库,企业能否成功转型就看它
  11. Tsung压力测试工具的搭建和使用,配置。
  12. websocket 聊天室 demo ( tornado + nginx + wss + 在线demo)
  13. windows修改用户文件夹名称 更改用户名 修改C盘Users目录下文件夹名称
  14. ESP8266-Arduino编程实例-SHT20温湿度传感器驱动
  15. 初步认识Apache Ignite
  16. 如何顺利通过c语言补考,大学里补考比考试难的学科,不想挂科最好认真学,尤其大一新生...
  17. BJOI2019 勘破神机 新解
  18. org.apache.thrift.transport.TTransportException: GSS initiate failed
  19. CNCERT:2012年中国互联网网络安全态势综述
  20. NASA准备在2021年推出最大望远镜!哈佛用棉花糖机造“肉”?

热门文章

  1. vs2010 出错:error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
  2. 在ZC702上运行Linux(4)-编译和使用U-Boot Linux
  3. swift4.2 - 一个自定义view弹框
  4. TCP协议的三次握手、四次挥手
  5. Python-day06-2018.7.9_编码以及小知识点补充
  6. WinForm 数据库无限填充树目录 treeView
  7. NFS客户端、服务器协商读写粒度(rsize、wsize)流程 【转】
  8. outlook恢复已删除邮件
  9. Intent打开各种类型的文件
  10. rhel5下限值用户使用su切换身份