scrapy插入mysql报错问题整理

来源:互联网 发布:python 抽象基类 编辑:程序博客网 时间:2024/05/04 19:25

首先我发现还是不能没有写博客的习惯,对自己短期内遇到的问题作一个精简有效的整理,花费一点时间但是能达到真正积累知识的效果,怎么样来说都是对个人有益的。虽然想搭一个自己的博客,但苦于现在没时间没钱(主要还是时间上),暂时还是放着。
本文记录最近在公司对接数据库遇到的一些问题,有自己遇到的之后解决了的,也有是在找错的时候发现的其他容易出现的错误和常见到的需要注意的地方,在这里做了部分整理,希望在以后的工作中能够避免甚至说很快地能找到出错的地方,持续更新…..

首先:Mysql + python2.7.11 + scrapy1.2.1

1.场景一:在使用scrapy的itemloader这个模块的add_xpath()和add_value()方法

这两个函数返回的类型都是list型,首先说add_xpath(),它本来就是加载传入的xpath语句然后去提取网页中的元素,得到的结果本身就是list类型,这个就比较明了;然后add_value(),我开始看着名字以为是返回一个string,后来我看到了如下图。
这里写图片描述

这一段的意思大致是(结合了一些item的东西):
每个item都由一个itemloader处理器来处理,它包含两部分,一个输入processor,一个输出processor。
这两个处理器都接收一个迭代器作为它们的参数,也就是说这个item是可迭代的。
输入处理器在收到add_xxxx之类的消息,就处理这些数据,并将得到的结果附加到对应的字段上(保存在itemloader中),等迭代完了,再用load_item()来填充该item对象。
中间那一段:输入处理器返回的值在内部(在list中)收集,然后传递到输出处理器以填充字段。
这样就能确认所有的add_xxxx方法返回的数据都是以list形式。

我在插入mysql的时候,长度为1的list却是能够正常插入,但是长度不为1(大于1)的直接是报的错误:1241 ,’Operand should contain 1 columns’
这里写图片描述

这里说明我这个是插入的数据应该只能是一行,之后我在把list转换成str之后,就能正常插入数据了。但是其中也会存在一些坑,开始我是用str直接包裹住某个item,一般这样的用法会报一大堆WARRING,但不知道为什么有些时候也会报ERROR,这个还有待在实践中找到问题源头。
我本人推荐的是用下面的方法转换:

#用一个空格隔开item某个字段的多个数据str_text = ' '.join(item['xxxx'])

2.场景二:插入mysql的表有自增主键

首先,这个有自增主键的表,主键是不需要去指定插入数据的,也就是说在插入数据的时候,可以忽略掉这一个字段,这个主键有以下几点特性:

1.自增主键默认从1开始,只能是数字,每插入一条数据以1为步长2.主键一直是增长的,后插入的数据的主键都是基于之前库中最后一条数据的主键+1

自增主键的description如下:
这里写图片描述

有两种方法插入:

create table your_tablename (id int PRIMARY KEY AUTO_INCREMENT,name varchar(50),pwd varchar(50));
//指定唯一主键数值插入insert into your_tablename values(1,'tingyun','tingyun')//让mysql自己做处理,将主键指定为null0,或者直接忽略这一项(3种写法)insert into your_tablename values(null,'tingyun','tingyun');insert into your_tablename values(0,'tingyun','tingyun');//这里就需要指定插入的数据项了insert into your_tablename(name,pwd) values('tingyun','tingyun');

注:在你设定了主键的时候,主键必须是唯一的,所以要么你自己构造唯一的数据去插入主键;要么就是声明一个自增主键,才能确保数据的唯一。

0 0
原创粉丝点击