在使用scrapy 爬取汽车评论时,insert语句执行老是出错
1. 保存长文本:mysql 保存长文本需使用text类型
create_command = 'create table evComm3(car_name varchar(20), advant text, disadvant text, sums text, support_num int(8))'
cursor.execute(create_command)
注:mysql中保存字符串的类型如下
CHAR(n) 固定长度,最多 255 个字符VARCHAR(n) 可变长度,MySQL 4.1 及以前最大 255 字符,MySQL 5 之后最大 65535 字节
TINYTEXT 可变长度,最多 255 个字符
TEXT 可变长度,最多 65535 个字符
MEDIUMTEXT 可变长度,最多 16777215(2^24 - 1)个字符
LONGTEXT 可变长度,最多 4294967295(2^32 - 1)(4G)个字符
2. 保存文本时,一直出现错误 Insert error: (1054, "Unkonw column '*' in 'field list' " )
insert_sql = "insert into evComm2(car_name,advant,disadvant,sums,support_num) values({0},{1},{2},{3},{4})".\
format(item['car_name'],item['advantage'],item['disadvantage'],item['sums'], int(item['support_num']))
cursor.execute(insert_sql)
经分析原因是python中sql语句的语法规定必须有引号将字符串值包起来
(1)解决方法一:直接用引号将{}包起来
insert_sql = "insert into evComm2(car_name,advant,disadvant,sums,support_num) values('{0}','{1}','{2}','{3}','{4}')".\
format(item['car_name'],item['advantage'],item['disadvantage'],item['sums'], int(item['support_num']))
cursor.execute(insert_sql)
(2) 解决方法二:使用repr()函数处理format中的字符串数据
insert_sql = "insert into evComm2(car_name,advant,disadvant,sums,support_num) values({0},{1},{2},{3},{4})".\
format(repr(item['car_name']),repr(item['advantage']),repr(item['disadvantage']),\
repr(item['sums']), int(item['support_num']))
cursor.execute(insert_sql)
事实上repr()和``做一样的事情