You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Scrapy Spider无法向MySQL插入数据 求问题排查指导

解决Scrapy Pipeline插入MySQL数据失败的问题

嘿,我帮你排查下这段Scrapy Pipeline代码里的问题,几个小细节没处理好,导致数据没成功插入到MySQL里:

  • 语法笔误导致执行失败
    你的store_db方法里写了self: curr.execute,这里的冒号是错误的,应该改成self.curr.execute。这个语法错误会直接让代码抛出异常,根本走不到插入数据的步骤。

  • SQL语句占位符使用错误
    你写的插入语句里,values ('title','movie','lyrics')是把三个字符串字面量插入到表中,而不是你从item里获取的实际数据。MySQL的占位符是%s,正确的写法应该是:

    self.curr.execute("""insert into mylyrics (title, movie, lyrics) values (%s, %s, %s)""", (
        item['title'][0],
        item['movie'][0],
        item['lyrics'][0]
    ))
    

    这里建议显式指定字段名(title, movie, lyrics),避免后续表结构调整时出现字段不匹配的问题。

  • 忘记在配置中启用Pipeline
    即使你写好了Pipeline代码,Scrapy默认不会自动调用它。你需要在项目的settings.py里添加ITEM_PIPELINES配置:

    ITEM_PIPELINES = {
        '你的项目名.pipelines.LyricsPipeline': 300,
    }
    

    数字300是优先级,数值越小的Pipeline会先被执行,只要配置了这个,Scrapy才会把item传给你的Pipeline处理。

  • 缺少异常处理机制
    如果item里的字段(比如title[0])不存在,或者数据库连接出现问题,代码会直接抛出异常,导致conn.commit()也不会执行。可以给store_db方法加上异常捕获,方便排查错误:

    def store_db(self, item):
        try:
            self.curr.execute("""insert into mylyrics (title, movie, lyrics) values (%s, %s, %s)""", (
                item['title'][0],
                item['movie'][0],
                item['lyrics'][0]
            ))
            self.conn.commit()
        except Exception as e:
            self.conn.rollback()
            print(f"插入数据时出错: {str(e)}")
    

    这样一旦出现错误,你能在控制台看到具体的报错信息,更容易定位问题。

  • 确认数据库和表的正确性
    别忘了检查:

    • MySQL中的lyrical数据库是否存在
    • mylyrics表是否已经创建,并且字段(title、movie、lyrics)的类型和你的插入数据匹配(都是text类型)
      如果之前注释了create_table方法,要确保你已经手动创建好对应的表。

内容的提问来源于stack exchange,提问作者Swaraj kumar Baboo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 07:38:15