scrapy爬虫运行一段时间报错pymysql.err.InterfaceError: (0, ‘‘)--adbapi.ConnectionPool 重连

本文介绍了解决Scrapy爬虫在运行过程中遇到MySQL连接断开问题的方法。通过在adbapi.ConnectionPool中设置cp_reconnect参数为True,确保了在连接断开后能够自动重连,同时提供了在插入数据前检查连接状态并按需重连的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

scrapy爬虫运行一段时间报错pymysql.err.InterfaceError: (0, ‘’)
有两种方法:

  1. 在插入前判断是否断连,如果断连则重连
  2. 在adbapi.ConnectionPool中设置参数cp_reconnect=True
class MysqlTwistedPipeline(object):
    def __init__(self, dbpool):
        self.dbpool = dbpool

    @classmethod
    def from_settings(cls, settings):
        dbpool = adbapi.ConnectionPool("pymysql", 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,cp_reconnect=True)
        print('数据库已链接-----------')
        return cls(dbpool)

    def process_item(self, item, spider):
        # 使用twisted将mysql插入变成异步执行
        query = self.dbpool.runInteraction(self.do_insert, item)
        query.addErrback(self.handle_error, item, spider)

    def handle_error(self, failure, item, spider):
        # 处理异步插入的异常
        print(failure)

    def do_insert(self, cursor, item):
        tt = cursor._connection._connection
        try:
            tt.ping(reconnect=True)
        except:
            self.dbpool.close()
            self.dbpool = adbapi.MysqlConnectionPool().dbpool()

        # # 执行具体的插入
        insert_sql, items = item.get_insert_sql()
        cursor.execute(insert_sql, items)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值