最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python中Scrapy+adbapi提高數(shù)據(jù)庫寫入效率實(shí)現(xiàn)

 更新時(shí)間:2021年10月20日 15:39:53   作者:許進(jìn)進(jìn)  
本文主要介紹了Python中Scrapy+adbapi提高數(shù)據(jù)庫寫入效率實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

一:twisted中的adbapi

​       數(shù)據(jù)庫pymysql的commit()和execute()在提交數(shù)據(jù)時(shí),都是同步提交至數(shù)據(jù)庫,由于scrapy框架數(shù)據(jù)的解析和異步多線程的,所以scrapy的數(shù)據(jù)解析速度,要遠(yuǎn)高于數(shù)據(jù)的寫入數(shù)據(jù)庫的速度。如果數(shù)據(jù)寫入過慢,會(huì)造成數(shù)據(jù)庫寫入的阻塞,影響數(shù)據(jù)庫寫入的效率。
使用twisted異步IO框架,實(shí)現(xiàn)數(shù)據(jù)的異步寫入,通過多線程異步的形式對(duì)數(shù)據(jù)進(jìn)行寫入,可以提高數(shù)據(jù)的寫入速度。

1.1 兩個(gè)主要方法

adbapi.ConnectionPool:

創(chuàng)建一個(gè)數(shù)據(jù)庫連接池對(duì)象,其中包括多個(gè)連接對(duì)象,每個(gè)連接對(duì)象在獨(dú)立的線程中工作。adbapi只是提供了異步訪問數(shù)據(jù)庫的編程框架,再其內(nèi)部依然使MySQLdb這樣的庫訪問數(shù)據(jù)庫。

dbpool.runInteraction(do_insert,item):

異步調(diào)用do_insert函數(shù),dbpool會(huì)選擇連接池中的一個(gè)連接對(duì)象在獨(dú)立線程中調(diào)用insert_db,其中參數(shù)item會(huì)被傳給do_insert的第二個(gè)參數(shù),傳給do_insert的第一個(gè)參數(shù)是一個(gè)Transaction對(duì)象,其接口與Cursor對(duì)象類似,可以調(diào)用execute方法執(zhí)行SQL語句,do_insert執(zhí)行后,連接對(duì)象會(huì)自動(dòng)調(diào)用commit方法

1.2 使用實(shí)例

from twisted.enterprise import adbapi
# 初始化數(shù)據(jù)庫連接池(線程池)
# 參數(shù)一:mysql的驅(qū)動(dòng)
# 參數(shù)二:連接mysql的配置信息
dbpool = adbapi.ConnectionPool('pymysql', **params)
# 參數(shù)1:在異步任務(wù)中要執(zhí)行的函數(shù)insert_db;
# 參數(shù)2:給該函數(shù)insert_db傳遞的參數(shù)
query = self.dbpool.runInteraction(self.do_insert, item)
# 在execute()之后,不需要再進(jìn)行commit(),連接池內(nèi)部會(huì)進(jìn)行提交的操作。
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)

二:結(jié)合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)

到此這篇關(guān)于Python中Scrapy+adbapi提高數(shù)據(jù)庫寫入效率實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Scrapy+adbapi數(shù)據(jù)庫寫入內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python 布爾類型示例精講

    Python 布爾類型示例精講

    這篇文章主要為大家介紹了Python 布爾類型示例精講,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • windows下搭建python scrapy爬蟲框架步驟

    windows下搭建python scrapy爬蟲框架步驟

    在本文內(nèi)容里小編給大家分享的是關(guān)于windows下搭建python scrapy爬蟲框架的教學(xué)內(nèi)容,需要的朋友們學(xué)習(xí)下。
    2018-12-12
  • 使用python flask框架開發(fā)圖片上傳接口的案例詳解

    使用python flask框架開發(fā)圖片上傳接口的案例詳解

    剛領(lǐng)導(dǎo)安排任務(wù),需求是這樣的開發(fā)一個(gè)支持多格式圖片上傳的接口,并且將圖片壓縮,支持在線預(yù)覽圖片,下面小編分享下使用python flask框架開發(fā)圖片上傳接口的案例詳解,感興趣的朋友一起看看吧
    2022-04-04
  • 使用 Python 實(shí)現(xiàn)微信消息的一鍵已讀的思路代碼

    使用 Python 實(shí)現(xiàn)微信消息的一鍵已讀的思路代碼

    利用python可以實(shí)現(xiàn)微信消息的一鍵已讀功能,怎么實(shí)現(xiàn)呢?你肯定會(huì)想著很復(fù)雜,但是python的好處就是很多人已經(jīng)把接口打包做好了,只需要調(diào)用即可,今天通過本文給大家分享使用 Python 實(shí)現(xiàn)微信消息的一鍵已讀的思路代碼,一起看看吧
    2021-06-06
  • 詳解Python連接MySQL數(shù)據(jù)庫的多種方式

    詳解Python連接MySQL數(shù)據(jù)庫的多種方式

    這篇文章主要介紹了Python連接MySQL數(shù)據(jù)庫方式,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • python實(shí)現(xiàn)360的字符顯示界面

    python實(shí)現(xiàn)360的字符顯示界面

    這篇文章主要介紹了python實(shí)現(xiàn)360的字符顯示界面示例,需要的朋友可以參考下
    2014-02-02
  • Python3二分查找?guī)旌瘮?shù)bisect(),bisect_left()和bisect_right()的區(qū)別

    Python3二分查找?guī)旌瘮?shù)bisect(),bisect_left()和bisect_right()的區(qū)別

    這篇文章主要介紹了Python3二分查找?guī)旌瘮?shù)bisect(),bisect_left()和bisect_right()的區(qū)別,本文通過示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-03-03
  • python opencv判斷圖像是否為空的實(shí)例

    python opencv判斷圖像是否為空的實(shí)例

    今天小編就為大家分享一篇python opencv判斷圖像是否為空的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • Python中異常捕獲與處理的方法總結(jié)

    Python中異常捕獲與處理的方法總結(jié)

    Python異常是在程序執(zhí)行時(shí)發(fā)生的錯(cuò)誤,可能會(huì)導(dǎo)致程序終止運(yùn)行。這篇文章主要為大家總結(jié)了Python中異常捕獲與處理的方法,需要的可以參考一下
    2023-04-04
  • python神經(jīng)網(wǎng)絡(luò)Batch?Normalization底層原理詳解

    python神經(jīng)網(wǎng)絡(luò)Batch?Normalization底層原理詳解

    這篇文章主要為大家介紹了python神經(jīng)網(wǎng)絡(luò)Batch?Normalization底層原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05

最新評(píng)論

石嘴山市| 泰顺县| 南充市| 安远县| 团风县| 焦作市| 新密市| 富裕县| 丹凤县| 名山县| 淅川县| 江西省| 沛县| 峨边| 德保县| 怀来县| 旬邑县| 嘉荫县| 旬邑县| 郎溪县| 察隅县| 三明市| 邓州市| 凯里市| 凉城县| 桦川县| 登封市| 桃源县| 崇州市| 丹棱县| 尼玛县| 巴塘县| 平塘县| 眉山市| 郸城县| 汨罗市| 新安县| 南平市| 苏尼特左旗| 手机| 皮山县|