在python把dataframe插入到一个新表,表是用python语句建的,设置的是charset=utf8mb4',但是mysql是gbk
from sqlalchemy import create_engine
import sqlalchemy
pymysql.install_as_MySQLdb()
DB_STRING = 'mysql+mysqldb://root:admin@127.0.0.1:3333/c_dataset?charset=utf8mb4'
engine = create_engine(DB_STRING)
Dtypes={
'id': sqlalchemy.types.String(50),
'img_url': sqlalchemy.types.String(200),
'title': sqlalchemy.types.String(200),
'price': sqlalchemy.types.Numeric(10,2),#保留两位小数
'link': sqlalchemy.types.String(200),
'store': sqlalchemy.types.String(50),
'sales': sqlalchemy.types.Integer(),
'rating': sqlalchemy.types.Integer(),
}
data.to_sql('jingdong_ah', con=engine, if_exists='replace', index=True,dtype=Dtypes)
pymysql.err.DataError: (1366, "Incorrect string value: '\xE2\x80\xA2\xE6\x97\xA0...' for column 'title' at row 179")
删了第179行,就报错178行
求解,明明是在python那建表,但是mysql那的charset不一样
将表的格式改为utf8, charset=utf8
你自己都知道编码不一致了,一个utf8mb4,一个gbk,咋不知道改成一样呢
试试这种方式生效吗:
DB = {
'drivername': 'mysql',
'host': '127.0.0.1',
'port': '3306',
'username': os.environ['DBUNAME'],
'password': os.environ['DBPASS'],
'database': os.environ['DBNAME'],
'query': {'charset':'utf8'}
}
engine = create_engine(URL(**DB))