已解决,在python代码是使用pymysql向mysql数据库插入数据时报错pymysql.err.DataError: (1366, '')
问题描述
我从某个网页上抓取并解析了一段html代码,然后将html代码转为utf-8格式,之后将html代码作为数据表的一个属性存入mysql数据库中:
selector = etree.HTML(content_html) content = selector.xpath(news['config']['content']) #找到html中某个节点的html if content: content_html = etree.tostring(content[0], encoding='utf-8').decode('utf-8') content_html = str(content_html,encoding='utf-8') # 保存数据到数据库 sql = "insert into school_news(title,url,content_html,pub_time,school_name,column_name) values(%s,%s,%s,%s,%s,%s)" params = ( title, news['url'], content_html, article_time, news['config']['name'], news['config']['column']) print(params) cursor = db_conn.cursor() cursor.execute(sql, params) db_conn.commit() cursor.close()
执行代码之后,报 cursor.execute(sql, params)这一行出现错误,也就是向数据库中插入数据报错,报错日志如下:
pymysql.err.DataError: (1366, '')
我把sql插入数据放到数据库中执行也是同样的错误,如下图:
这说明程序逻辑应该没有问题,猜测应该是数据或者数据类型、格式等与数据库要求的不一致的问题。
原因分析:
在某度上搜索 这个错误:
pymysql.err.DataError: (1366, ''),发现括号中都是后面带有具体的错误信息,而我的这个错误信息为''.因此都没有解决我的问题。
于是我只能按照自己的猜测,把数据的类型,长度、数据库的编码方式等一一进行了检查,都没有发现问题。再万般无奈之下,我尝试插入一条简单的数据,发现没有问题,但是插入报错的那条数据就会报错,于是我一个一个字的检查了插入的数据,发现有个字显示异常,把它复制出来看看:
有一个中文字变成了一个口,把这个字复制到某度上,显示是“勇”这个字,但复制回数据库就会变回一个口。
因此,我认为这个字的编码有问题,导致数据库识别不出来,所以,我爸这个字删除,就成功保存成功了,至此问题的原因就找到了。
对别两个字,是不一样的,上面是不正常的,下面的是正常的:
解决方案:
发生该错误的原因是其中有某个数据的编码有问题,导致无法插入数据库,但是我已经对该数据转为utf-8了,在pycharm中能显示为中文,但是与其他字的样子看着不一样。因此,我的解决方法就是将不正常的字替换为正常的字:
同时在保存数据到数据库的代码外层加一个try except捕获异常,如果下次还是报错,向这样的错误数据,我就不要了。