本文摘自PHP中文网,作者little bottle,侵删。
我们都知道mysql数据库能存储大量数据,但是你知道数据是怎么存储在mysql中的吗?
一般将数据保存到MySQL中有两种方式,同步模式和异步模式。
同步模式
同步模式是采用SQL语句,将数据插入到数据库中。但是要注意的是Scrapy的解析速度要远大于MySQL的入库速度,当有大量解析的时候,MySQL的入库就可能会阻塞。
1 2 3 4 5 6 7 8 9 | 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的配置,我们可以直接在配置文件配置数据库:
1 2 3 | MYSQL_HOST = "127.0.0.1"
MYSQL_DBNAME = "article_spider"
MYSQL_USER = "root" MYSQL_PASSWORD = "root"
|
在settings中的配置,我们通过在pipeline中定义from_settings获取settings对象,可以直接获取settings配置文件中的值。
使用Twisted提供的异步容器连接MySQL:
1 2 3 | import MySQLdb
import MySQLdb.cursorsfrom twisted.enterprise
import adbapi
|
使用adbapi可以使mysqldb的一些操作变成异步化的操作
使用cursors进行sql语句的执行和提交
阅读剩余部分
相关阅读 >>
order是什么意思?
参考指南:mysql & mariadb online ddl
java最新版本连接mysql失败的解决过程
mysqli_query()的用法
c++连接并使用mysql数据库
mysql数据库在centos系统下如何被彻底删除的步骤介绍
mysql的事务隔离级别的详细介绍(附代码)
一些常用的mysql优化方法总结
mysql备份还原库命令方法解析(长文)
mysql怎么创建索引
更多相关阅读请进入《数据存储》频道 >>
机械工业出版社
本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。
转载请注明出处:木庄网络博客 » 数据是怎么存储在mysql?