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)

相关推荐

  • 2021-2022第一学期20212316《网络空间安全专业导论》第十一周自学总结

    技术2021-2022第一学期20212316《网络空间安全专业导论》第十一周自学总结 2021-2022第一学期20212316《网络空间安全专业导论》第十一周自学总结2021-2022第一学期202

    礼包 2021年12月20日
  • 眉间痣,痣,长在脸上哪些部位算是美女

    技术眉间痣,痣,长在脸上哪些部位算是美女有人认为眉间痣,长在眉心和嘴角的痣是美人痣。其实不然,长在眼睑旁边和下方肤色较淡部位的明亮之痣,才会让人增色和增运。少数痣的确能够使人更美,但并不是每个人都是美人胚子,关于“美人痣

    生活 2021年10月26日
  • 面向对象设计原则之迪米特法则

    技术面向对象设计原则之迪米特法则 面向对象设计原则之迪米特法则转载来自:https://blog.csdn.net/lovelion/article/details/7563445
    迪米特法则来自于19

    礼包 2021年11月5日
  • SQL查询语句怎么写

    技术SQL查询语句怎么写这篇文章主要为大家展示了“SQL查询语句怎么写”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“SQL查询语句怎么写”这篇文章吧。查询所有列Select

    攻略 2021年11月11日
  • 美国云服务器相比VPS有什么不同

    技术美国云服务器相比VPS有什么不同由于相比VPS,美国云服务器可以为更有效地使用物理资源铺平道路,因此成为很多海外站长的建站首选。那么,是什么是美国云服务器?为了彻底了解这项技术,我们首先要了解美国VPS的功能。什么是

    礼包 2021年12月1日
  • 【CSS】让图片在高宽固定的div里水平垂直都居中的三种办法

    技术【CSS】让图片在高宽固定的div里水平垂直都居中的三种办法 【CSS】让图片在高宽固定的div里水平垂直都居中的三种办法效果:实现一:绝对定位加精算!DOCTYPE html
    html
    head

    礼包 2021年12月21日