问题描述
在插入数据的时候抛出以下异常:
Warning: (1366, "Incorrect string value: '\\xD6\\xD0\\xB9\\xFA\\xB1\\xEA...' for column 'VARIABLE_VALUE' at row 484")
result = self._query(query)
相关代码
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String
Base = declarative_base()
class User(Base):
__tablename__ = 'user'
id = Column(Integer, primary_key=True)
name = Column(String(255))
sex = Column(String(8))
if __name__ == "__main__":
engine = create_engine("mysql+pymysql://root:password@localhost/my_db")
Session = sessionmaker(bind=engine)
user= User(name="测试", sex="男")
session = Session()
session.add(user)
session.commit()
session.close()
print("插入成功")
执行后抛出警告
驱动暂时使用的是pymysql,问题就在这里,各种网上搜索解决方案,基本上都是说字符集的不统一导致的,解决方法都是修改数据库和pycharm字符集,保持统一,但都没有效果,依然抛出异常
也有人遇到类似问题:
warning是:
Incorrect string value: '\\xE4ische...' for column 'VARIABLE_VALUE' at row 1
在德国论坛里发现这是时间setting的问题,db里有datetime的column,而他的电脑是德语default的,然后时钟是"Mitteleuropäische Sommerzeit" (Central european summer time),所以warning里面这个'\\xE4ische...'其实就是'ärische'的ä不是utf8mb4,估计这个是中国北京时间这几个字decode不了吧
解决方法
1.安装cymysql驱动
pip install -i https://pypi.douban.com/simple cymysql
2.修改代码
engine = create_engine("mysql+pymysql://root:password@localhost/my_db")
改为:
engine = create_engine("mysql+cymysql://root:password@localhost/my_db")
执行后插入成功,一切正常