在python

时间:2016-04-14 23:01:24

标签: python mysql unicode encoding mysql-python

我正在使用Beautifulsoup从中文网站上抓取中文文本,我试图在python中通过MySQLdb插入我写入mysql数据库的字符串。但是当我执行查询时遇到了UnicodeEncodeError。代码如下:

movie_name_fail = my_beautifulsoup_object.find("div").text
my_cursor.execute("INSERT INTO MOVIE_TABLE VALUES(%s)",movie_name_fail)

它给了我错误:

UnicodeEncodeError: 'latin-1' codec can't encode characters in position 0-7: ordinal not in range(256)

但是当我做的时候

print movie_name_fail

汉字可以正确打印出来。 我已经宣布了

#!/usr/bin/python
# -*- coding: utf-8 -*-

作为我的python源文件的编码,但它不起作用。但是,当我直接在我的文本编辑器中输入相同的中文字符时(我使用的是崇高的文本),它工作得很好,我可以将它插入到mysql中并正确显示在mysql控制台中(我已经将mysql中表的CHARACTER SET设置为utf8):

movie_name_success = "超人总动员"
my_cursor.execute("INSERT INTO MOVIE_TABLE VALUES(%s)",movie_name_success)

我无法弄清楚为什么错误发生以及它是如何工作的。我真的很感激任何帮助。

更新

我的python版本是2.7.8,而MYSQL版本是5.7.11

我将源代码推送到github,它应该能够在第117行重现错误:“db_cursor.executemany(insert_sql,movie_tuple_list)”

https://github.com/shawnli2010/JHSaver/blob/master/LeTV_scraper.py

1 个答案:

答案 0 :(得分:1)

在进行替换时,Python构造是否会添加引号?它需要。

您是否为连接建立了utf8mb4?

表/列是CHARACTER SET utf8mb4吗?

More Python notes

我建议使用utf8mb4而不是utf8,因为中文有一些需要4个字节的字符。