sqlalchemy插入数据到mysql异常

Posted scnuwang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sqlalchemy插入数据到mysql异常相关的知识,希望对你有一定的参考价值。

1. 插入中文报错:

在数据库名称后面添加?charset=utf8
engine = create_engine("mysql+pymysql://root:[email protected]/data?charset=utf8", echo=True)

2. 正常插入,但是提示以下警告:

2018-06-06 16:28:39,789 INFO sqlalchemy.engine.base.Engine SHOW VARIABLES LIKE 'sql_mode'
2018-06-06 16:28:39,790 INFO sqlalchemy.engine.base.Engine {}
D:\\PythonProjects\\venv\\lib\\site-packages\\pymysql\\cursors.py:170: Warning: (1366, "Incorrect string value: '\\\\xD6\\\\xD0\\\\xB9\\\\xFA\\\\xB1\\\\xEA...' for column 'VARIABLE_VALUE' at row 480")
  result = self._query(query)

代码如下:

from sqlalchemy import Column,Integer,String,DECIMAL,create_engine,DateTime
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()


class Product(Base):
    __tablename__ = 'cj_product_test'
    id = Column(Integer,primary_key=True,autoincrement=True)
    original_id = Column(String(255))
    product_name = Column(String(255))
    def __repr__(self):
        return "<Product(id='%d', original_id='%s', product_name='%s')>" % (self.id, self.original_id, self.product_name)

# 插入中文会报错,需要在数据库名称后面添加?charset=utf8
engine = create_engine("mysql+pymysql://root:[email protected]/data?charset=utf8", echo=True)
Product.metadata.create_all(engine)
DBSession = sessionmaker(bind=engine)
product = Product(original_id='432143',product_name='施华洛世奇')
session = DBSession()
session.add(product)
session.commit()
session.close()

MySQL自生的一个BUG:
https://www.cnblogs.com/pengyusong/p/6008936.html
https://bugs.mysql.com/bug.php?id=82414

以上是关于sqlalchemy插入数据到mysql异常的主要内容,如果未能解决你的问题,请参考以下文章

每当 MySQL 抛出警告时,我如何通知 sqlalchemy 引发错误?

python UTC日期和sqlalchemy

使用 SQLAlchemy 和 Pandas 插入数据 - Python

插入到自动映射生成的 ORM 时出现 SQLAlchemy InvalidRequestError

sqlalchemy 使用pymysql连接mysql 1366错误

sqlalchemy 使用pymysql连接mysql 1366错误