欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

pymysql插入数据到mysql: Insert error: (1054, "Unkonw column '*' in 'field list' " )

程序员文章站 2022-04-18 11:40:56
...

在使用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)

pymysql插入数据到mysql: Insert error: (1054, "Unkonw column '*' in 'field list' " )

经分析原因是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()和``做一样的事情