学编程 ❀(๑╯◡╰๑)❀ 就上soxunxi.cn!这里有CMS,CSS,NET,PHP,Linux,HTML,JAVA,MySQL,Python等教程.
当前位置: MySQL > 数据是怎样存储在mysql?【MySQL教程】,数据存储,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 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?的细致内容,更多请关注ki4网别的相干文章!

「梦想一旦被付诸行动,就会变得神圣,如果觉得我的文章对您有用,请帮助本站成长」

分享到:
赞(0) 打赏

支付宝扫一扫打赏

微信扫一扫打赏

标签:

上一篇:

下一篇:

相关推荐

0 条评论关于"数据是怎样存储在mysql?【MySQL教程】,数据存储,mysql"

最新评论

    暂无留言哦~~

博客简介

看古风美女插画Cos小姐姐,素材合集图集打包下载:炫龙网,好看二次元插画应有尽有,唯美小姐姐等你来。

友情链接

他们同样是一群网虫,却不是每天泡在网上游走在淘宝和网游之间、刷着本来就快要透支的信用卡。他们或许没有踏出国门一步,但同学却不局限在一国一校,而是遍及全球!申请交换友链

服务热线:
 

 QQ在线交流

 旺旺在线