python 数据库操作 使用连接池

# 操作数据库存储数据是 IO 操作,IO操作比较消耗时间,所以可以异步操作
from twisted.enterprise import adbapi
from pymysql.cursors import DictCursor
from pymysql

class JianshuTwistedSpiderPipeline(object):

    def __init__(self):
        dbdata = {
            'host': 'localhost',
            'user': 'root',
            'password': 'root',
            'database': 'jianshu',
            'port': 3306,
            'charset': 'utf8',
            'cursorclass': DictCursor
        }
        
        self.dbpool = adbapi.ConnectionPool('pymysql', **dbdata)

        self._sql = None

    @property
    def sql(self):
        if not self._sql:
            self._sql = """
                insert into detail(id,title,conllection,pub_time,wordage,views_count,conmments_count,likes_count,detai_url) values(null,%s,%s,%s,%s,%s,%s,%s,%s)
                """
            return self._sql
        return self._sql

    def process_item(self, item, spider):
        defer = self.dbpool.runInteraction(self.insert_item, item)
        defer.addErrback(self.handle_error, item, spider) # 处理错误

    def handle_error(self, error, item, spider):
        print('*'*10, 'error', '*'*10)
        print(error)
        print('*'*10, 'error', '*'*10)

    def insert_item(self, cursor, item):

        title, collection, pub_time, wordage, views_count, comments_count, likes_count, detail_url = item.values()
        cursor.execute(self.sql, (title, collection, pub_time, wordage, views_count, comments_count, likes_count, detail_url))

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值