对于1054, "Unknown column 字段名 in 'field list'"
例如"Unknown column name in 'field list'"
self.sql_insert="""insert into tencent(price,name,num,course_name) VALUES({0}, {1}, {2}, {3})""" .format(item['price'], item['name'],item['num'],item['course_name'])
数据库设计如下:
数据库中的name字段是varchar类型,而借助python爬取的name数据为str类型。
使用上述sql语句插入报错:1054, "Unknown column 'name' in 'field list'"
其原因在于,使用的pymysql在插入数据的时候,如果是vchar类型,需要加入单引号,即name = "'姚明'",其中还要有一个引号,对应矩阵存储,要先用str()进行转化,然后在加单引号才能成功。
解决方法
借助python中的repr()函数,该函数可以自动将其加上引号,所以对sql语句进行了修改。
self.sql_insert="""insert into tencent(price,name,num,course_name) VALUES({0}, {1}, {2}, {3})""" .format(repr(item['price']), repr(item['name']),repr(item['num']),repr(item['course_name']))
注意:我的数据均为string类型。
对于报错为:pymysql.err.InternalError: (1054, "Unknown column 'None' in 'field list'")
这种种情况与上述类似:
如果数据为None,将其写入mysql中就会报以上错误,可以采用将None替换为'Null'的方法解决上述问题。
因此,在执行上述sql语句时,不再是
self.cursor.execute(self.sql_insert)
而是
self.cursor.execute(self.sql_insert.replace('None', 'NULL'))