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方法,要确保你已经手动创建好对应的表。
- MySQL中的
内容的提问来源于stack exchange,提问作者Swaraj kumar Baboo
相关产品推荐
相关产品推荐

