我们都知道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?相关推荐

  1. oracle对数据块的存取,简单了解数据在Oracle文件中的存储

    2010-02-13 目的: 1. 了解数据块转储 2. 简单认证数据在ORACLE文件的存储 测试环境: VM+Win2003+Oracle11g DB_BLOCK_SIZE 8k C:\Docum ...

  2. c/c++对象模型大总结:第5-8章、数据成员的存取与布局

    深度探索c++对象模型大总结.中 --第五~八章 作者:July.吴黎明. 声明:版权所有,侵权必究. 二零一一年三月十八日. 本文接上一篇 c++对象模型大总结:第1-4章.对象初探与构造函数,而写 ...

  3. vc中人脸识别数据导入mysql_虹软人脸识别 - 采用数据库存取人脸特征数据

    虹软人脸识别 - 采用数据库存取人脸特征数据 前几天有个朋友遇到了个问题,他在使用虹软的人脸识别引擎时,想更换一下人脸识别的存储方式,原本demo中使用的是文件的方式进行存储,而他想要通过数据库的方式 ...

  4. Web网站架构演变—高并发、大数据

    转 Web网站架构演变-高并发.大数据 2018年07月25日 17:27:22 gis_morningsun 阅读数:599 前言 我们以javaweb为例,来搭建一个简单的电商系统,看看这个系统可 ...

  5. PHP网站如何搬迁,如何搬迁DedeCMS站点数据

    我们先将目的地的数据库账号密码获取到,并且保证持有一个数据库或拥有创建数据库的权限. 1.首先登录织梦的后台,进入到"系统>数据库备份/还原"栏目 2.如果之前有备份过数据, ...

  6. 织梦dedecms模板--物流快递网站模板源码-带手机版数据同步

    介绍: 快递网站源码_物流网站模板源码[带手机版数据同步]采用一库两站简洁方便管理后台,一个后台管理两网站,电脑版+手机版  1.网站手工DIV+css,代码精简,首页排版整洁大方.布局合理.利于SE ...

  7. seo结构化数据_为什么使用结构化数据有助于您网站的SEO

    seo结构化数据 Few things are as exciting for a new developer as getting their first customers. The idea o ...

  8. python爬网站数据实例-如何用Python爬数据?(一)网页抓取

    如何用Python爬数据?(一)网页抓取 你期待已久的Python网络数据爬虫教程来了.本文为你演示如何从网页里找到感兴趣的链接和说明文字,抓取并存储到Excel. 需求 我在公众号后台,经常可以收到 ...

  9. 虹软人脸识别 - 采用数据库存取人脸特征数据

    虹软人脸识别 - 采用数据库存取人脸特征数据 前几天有个朋友遇到了个问题,他在使用虹软的人脸识别引擎时,想更换一下人脸识别的存储方式,原本demo中使用的是文件的方式进行存储,而他想要通过数据库的方式 ...

最新文章

  1. [POJ3261] Milk Patterns
  2. 除了芯片,我们还应关注这六大核心技术!
  3. 【Android 应用开发】Android 组件 位置坐标 属性 ( 组件位置属性 | 父容器坐标系坐标 | 窗口坐标系坐标 | 屏幕坐标系坐标 | 触摸坐标 )
  4. How to tell if UIViewController's view is visible
  5. centos 升级mysql5.6_centos6.9升级mysql5.1到mysql5.6
  6. python中and和or的惰性求值特点_惰性求值和yield-Python
  7. 带分页功能的SSH整合,DAO层经典封装
  8. 【转载保存】什么是线程阻塞?为什么会出现线程阻塞?
  9. uni 修改数据页面不重新渲染
  10. Hibernate建立关系配置(hbm.xml)bag中cascade属性
  11. 【引用】她拒绝了他100次,但第101次他拒绝了她
  12. 常州模拟赛d3t2 灰狼呼唤着同胞
  13. 创建额外域控制器Active Directory(二)
  14. 搜c语言题答案软件下载,C语言二级题库软件下载-C语言二级题库官方版下载v1.01-乐游网安卓下载...
  15. 记录甘肃机顶盒MG101_U2破解之路的辛酸历程
  16. CrossApp V1.0.2 正式推出,优化众多内容/更加稳定
  17. H5标签 marquee 滚动字幕
  18. Flink On K8S终极实现方案
  19. 华为HCIP-DATACOM391-420(821)
  20. 实现小程序与SSM后台数据交互

热门文章

  1. 【lucene】Lucene 自定义 Parser
  2. 【高并发】掌握JUC中的阻塞队列
  3. 【Kafka】Kafka ERROR [ConsumerFetcherThread-console-consumer], Error for partition [xx,5] to broker 10
  4. 【Git】Git如何在不提交当前分支的情况下切换到其它分支进行操作-git stash
  5. Spring boot :使用 Swagger 2 构建 RESTful APIs
  6. 【Calcite】CHAR(1) CHARACTER SET “ISO-8859-1“ COLLATE “ISO-8859-1$en_US$primary“ NOT NULL
  7. Flink eventTime案例无输出
  8. Cookie、Session、Token、JWT分别是什么(三)
  9. 云计算实战系列十(文件查找及包管理)
  10. C++常见面试题,来看看你会几个~~