Python中如何实现Scrapy+adbapi提高数据库写入效率

技术Python中如何实现Scrapy+adbapi提高数据库写入效率今天就跟大家聊聊有关Python中如何实现Scrapy+adbapi提高数据库写入效率,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下

今天就和大家聊聊如何在Python中实现Scratchy ADBAPI来提高数据库编写的效率,这个可能很多人都不太懂。为了让你更好地理解,边肖为你总结了以下内容,希望你能从这篇文章中有所收获。

数据库10-1010中pymysql的Commit()和execute()在提交数据时同步提交给数据库。由于scrapy框架的数据解析和异步多线程,scrapy的数据解析速度远高于将数据写入数据库的速度。如果数据写得太慢,会阻塞数据库写,影响数据库写的效率。

使用扭曲的异步IO框架,可以异步写入数据,多线程可以异步写入数据,可以提高数据写入速度。

一:twisted中的adbapi

adbapi.ConnectionPool:

创建一个数据库连接池对象,它包括多个连接对象,每个连接对象在一个独立的线程中工作。Adbapi只为异步访问数据库提供了一个编程框架,在它里面,像MySQLdb这样的库仍然可以访问数据库。

dbpool.runInteraction(do_insert,item):

异步调用do_insert函数,dbpool会在连接池中选择一个连接对象,在一个独立的线程中调用insert_db,其中参数项会传递给do_insert的第二个参数,传递给do_insert的第一个参数是Transaction对象,其接口类似于Cursor对象,可以调用execute方法执行SQL语句。执行do_insert后,连接对象将自动调用提交方法。

1.1 两个主要方法

从twisted.enterpriseimportadbapi #初始化数据库连接池(线程池)。

#参数1: mysql驱动程序。

#参数2:连接mysql的配置信息。

dbpool=adbapi . connectionpool(' pymysql ',* * params) #参数1:函数insert _ db在异步任务中执行;

#参数2:传递给函数insert_db的参数。

查询=自我。dbpool。runinteraction(自我。do _ insert,item)# execute()之后,不需要提交(),提交操作将在连接池内部执行。

defdo_insert(自身、光标、项目):

insert_sql=' ' '

insertintoqa_sample(

need_id,

需要_问题_正常运行时间,

需要_标题,

需要_标题_描述,

需要_答案_正常运行时间,

需要_答案)

值(%s,%s,%s,%s,%s,%s,% s,% s)

nbsp; """
    params = (item['need_id'],
              item['need_question_uptime'],
              item['need_title'],
              item['need_title_describe'],
              item['need_answer_uptime'],
              item['need_answer'])
    cursor.execute(insert_sql, params)

二:结合scrapy中的pipelines

# -*- coding: utf-8 -*-
from twisted.enterprise import adbapi
import pymysql
 
# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://docs.scrapy.org/en/latest/topics/item-pipeline.html
 
 
class QaSpiderPipeline(object):
    def process_item(self, item, spider):
        return item
 
class MysqlTwistedPipeline(object):
    def __init__(self, dbpool):
        self.dbpool = dbpool
 
    @classmethod
    def from_settings(cls, settings):
        dbparams = dict(
            host=settings['MYSQL_HOST'],
            db=settings['MYSQL_DBNAME'],
            user=settings['MYSQL_USER'],
            passwd=settings['MYSQL_PASSWORD'],
            charset='utf8',
            cursorclass=pymysql.cursors.DictCursor,
            use_unicode=True
        )
        dbpool = adbapi.ConnectionPool('pymysql', **dbparams)
        return cls(dbpool)
 
    def process_item(self, item, spider):
        query = self.dbpool.runInteraction(self.do_insert, item)
 
    def do_insert(self, cursor, item):
        insert_sql = """
                insert into qa_sample( 
                need_id, 
                need_question_uptime, 
                need_title, 
                need_title_describe, 
                need_answer_uptime, 
                need_answer)
                values (%s, %s, %s, %s, %s, %s)
                """
        params = (item['need_id'],
                  item['need_question_uptime'],
                  item['need_title'],
                  item['need_title_describe'],
                  item['need_answer_uptime'],
                  item['need_answer'])
        cursor.execute(insert_sql, params)

看完上述内容,你们对Python中如何实现Scrapy+adbapi提高数据库写入效率有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/39242.html

(0)

相关推荐

  • 华为手机什么型号好,现在华为哪款手机值得购买

    技术华为手机什么型号好,现在华为哪款手机值得购买华为手机比较好的型号当然推荐华为mate 系列和P系列了华为手机什么型号好。华为手机现在型号系列不断拓展,型号分布也十分丰富了,最为顶尖的华为手机型号先推荐华为mate 系

    生活 2021年10月28日
  • qq靓号注册,怎样免费注册五位数的qq号

    技术qq靓号注册,怎样免费注册五位数的qq号现在五位数的QQ号已经无法免费申请,只能申请到10位数的QQ号。想要10位数以下的QQ号,只能通过购买QQ靓号获得。申请QQ靓号方法:1qq靓号注册、选择QQ号码;先登录到QQ

    生活 2021年10月22日
  • 上引号,这段话在人字上加引号的作用

    技术上引号,这段话在人字上加引号的作用这段话在“人“字上加引号的作用是表示特殊的称谓,指具有特殊含义的词语上引号。引号的作用如下:1、表示引用的部分。文章中的人物对话或者是直接引用别人的话(或文章)用引号,为的是把他们和

    生活 2021年10月20日
  • 有哪些常用的JS正则表达式

    技术有哪些常用的JS正则表达式本篇内容介绍了“有哪些常用的JS正则表达式”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1

    攻略 2021年11月2日
  • 哪些水果含维生素c,含有维生素C的食物有什么

    技术哪些水果含维生素c,含有维生素C的食物有什么含维生素C的食物很多哪些水果含维生素c,好多水果蔬菜都有。水果比如苹果,梨,荔枝,橘子,葡萄等,蔬菜比如辣椒,白菜,茄子,番茄。好多好多,只要丰富点,换着吃,每天摄入量足够

    生活 2021年10月27日
  • 如何理解NacosRibbonClientConfiguration

    技术如何理解NacosRibbonClientConfiguration今天就跟大家聊聊有关如何理解NacosRibbonClientConfiguration,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了

    攻略 2021年10月20日