python3无法保存到mysql

python3无法保存到mysql,python,mysql,Python,Mysql,它应该从网站收集数据并保存到数据库,它可以收集数据但不能保存,我已经测试了mysql之间的连接工作正常,但不能保存。有人请帮忙 from bs4 import BeautifulSoup from urllib import request from urllib import parse import MySQLdb db_connection = MySQLdb.connect(host='localhost', db='database', user='root', passwd='1

它应该从网站收集数据并保存到数据库,它可以收集数据但不能保存,我已经测试了mysql之间的连接工作正常,但不能保存。有人请帮忙

from bs4 import BeautifulSoup
from urllib import request
from urllib import parse

import MySQLdb

db_connection = MySQLdb.connect(host='localhost', db='database', user='root', passwd='123321') 

cursor = db_connection.cursor()

url = "https://srh.bankofchina.com/search/whpj/search_cn.jsp"
Form_Data = {}
Form_Data['erectDate'] = ''
Form_Data['nothing'] = ''
Form_Data['pjname'] = '欧元'
data = parse.urlencode(Form_Data).encode('utf-8')
html = request.urlopen(url,data).read()
soup = BeautifulSoup(html,'html.parser')

div = soup.find('div', attrs = {'class':'BOC_main publish'})
table = div.find('table')
tr = table.find_all('tr')
td = tr[1].find_all('td')
c_name = td[0].text.strip()
c_updated = td[3].text.strip()
print(td[0].get_text(),td[3].get_text(),td[6].get_text())

sql = ("INSERT INTO currency_rate(c_name,c_updated)" "VALUES (%s,%s)" %(c_name,c_updated))

try:

   cursor.execute(sql)

   db_connection.commit()
except:

   db_connection.rollback()


db_connection.close()
这是错误消息:

回溯(最近一次呼叫最后一次): 文件“D:\Python\Python38\test1.py”,第33行,在 cursor.execute(sql) 文件“D:\Python\Python38\lib\site packages\MySQLdb\cursors.py”,第191行,在execute中 query=query.encode(db.encoding) 文件“D:\Python\Python38\lib\encodings\cp1252.py”,第12行,在encode中 返回codecs.charmap\u encode(输入、错误、编码表)
UnicodeEncodeError:“charmap”编解码器无法对位置52-53中的字符进行编码:字符映射到

看起来您有unicode解码/编码错误。看一看这张照片

从我在回溯中看到的情况来看,您的数据库使用的编码似乎不支持您试图保存的某些字符

在执行查询之前,请尝试更改数据库的编码(在MySql world中也称为)或将字符串编码为db可以接受的内容

p、 s:您的sql似乎也有点格式错误,似乎缺少几个顶点:

请尝试修改此行:

sql = ("INSERT INTO currency_rate(c_name,c_updated)" "VALUES (%s,%s)" %(c_name,c_updated))
进入:


在Try/accept中尝试
,例外情况除外,如e:
打印(e)
。可能是引发了异常,但它失败了。我也这么认为,但我不知道在哪里添加编码选项卡…在Mysql中,您必须创建声明字符集的db,如下所示:创建数据库mydatabase字符集utf8mb4 COLLATE utf8mb4_0900_ai_ci;。在表定义中声明字符集也是一种很好的做法:创建表mytable(…)引擎=InnoDB默认字符集=utf8mb4;
sql = ("INSERT INTO currency_rate(c_name,c_updated)" "VALUES ('%s','%s')" %(c_name,c_updated))