python解决SQLAlchemy+MySQL插入数据时报警告Warning: (1366, "Incorrect string value: '\\xD6\\...' for column ...

本文介绍了一种在使用SQLAlchemy框架和pymysql驱动向MySQL数据库插入中文数据时遇到的异常问题及其解决方法。异常表现为无法正确解析中文字符,通过更换数据库驱动为cymysql并调整代码配置,成功解决了问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述

在插入数据的时候抛出以下异常:
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")

执行后插入成功,一切正常

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NealHuiwen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值