这两天在用python写DAO轮子,方便之后爬虫的数据存储。

运行环境 Runtime environment

1
2
3
操作系统 : Windows10  
IDE: JetBrains Pycharm 2018.2.4 x64
Python: 3.6.2

症状

尝试在用INSERT INTO进行插入数据的时候,出现了报错。

报错信息:”latin-1’ codec can’t encode character”

这一般是因为编码不一致导致的,部分报错代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
try:
# 创建连接对象
conn = MySQLdb.connect(
host=connect_dict["host"],
port=connect_dict["port"],
user=connect_dict["user"],
passwd=connect_dict["passwd"],
db=connect_dict["db"],
)
return conn
except Exception as e:
print("FTP登陆失败,请检查主机号、用户名、密码是否正确:%s"%e)
sys.exit(0)

解决办法

由于当初创建数据库时,选择的编码格式为UTF8,所以在用PyMySQL模块实例化连接对象的时候,要加入对编码的声明。

使用XXX.set_character_set(‘utf8’)来处理即可

将其部分修改为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
 try:
# 创建连接对象
conn = MySQLdb.connect(
host=connect_dict["host"],
port=connect_dict["port"],
user=connect_dict["user"],
passwd=connect_dict["passwd"],
db=connect_dict["db"],
)
conn.set_character_set('utf8') # 声明编码格式
return conn
except Exception as e:
print("FTP登陆失败,请检查主机号、用户名、密码是否正确:%s"%e)
sys.exit(0)

即可解决这个问题!