scrapy之異步寫入數據庫

1 setting.py文件,寫入數據庫連接屬性

    # mysql連接屬性
    MYHOST = '127.0.0.1'
    MYUSER = 'root'
    MYPASSWORD = '123'
    MYDB = 'temp'

2 pipelines.py文件,寫入管道

      首先導入

    # 異步數據庫操作api
    from twisted.enterprise import adbapi
    import MySQLdb.cursors

      編寫管道

    # 異步寫入mysql pipeline    
    class TwistedCnblogMysqlPipeline(object):
        def __init__(self,dbpool):
            self.dbpool = dbpool
        # 方法名是固定的,類方法,該方法優先於__init__執行
        @classmethod 
        def from_settings(cls, settings):
            db_config = dict(
                #變量名固定
                host = settings['MYHOST'],
                user = settings['MYUSER'],
                passwd = settings['MYPASSWORD'],
                db = settings['MYDB'],
                charset = 'utf8',
                cursorclass = MySQLdb.cursors.DictCursor,
            )
            # 數據庫連接池
            dbpool = adbapi.ConnectionPool('MySQLdb' ,**db_config)
            return cls(dbpool)
        def process_item(self,item,spider):
            # 異步插入操作
            query = self.dbpool.runInteraction(self.insert,item)
            query.addErrback(self.handle_error)
            return item
        # 插入操作
        def insert(self,cursor,item):
            sql = '插入語句'
            cursor.execute(sql)
        #錯誤處理函數
        def handle_error(self,error):
            print str(error)

3 settings.py文件,加入該管道

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章