在python3中使用Sqlalchemy插入MySQL查找类型错误的原因

2024-09-24 16:31:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经将一个工作数据库从SQLite3迁移到MySQL。大部分都很好,但在一个表上,我在尝试添加行时遇到以下错误:

sqlalchemy.exc.DBAPIError: (pymysql.err.Error) (<class 'TypeError'>, TypeError("a bytes-like object is required, not 'int'",)) [SQL: 'INSERT INTO offers2 (`OfferID`) VALUES (%s)'] [parameters: (999999,)]

我试着在echo上图灵,看看它在做什么,这就是它失败的地方:

2017-10-06 20:24:34,453 INFO sqlalchemy.engine.base.Engine BEGIN (implicit)
2017-10-06 20:24:34,454 INFO sqlalchemy.engine.base.Engine INSERT INTO offers2 (`OfferID`) VALUES (%s)
2017-10-06 20:24:34,454 INFO sqlalchemy.engine.base.Engine (999999,)
2017-10-06 20:24:34,455 INFO sqlalchemy.engine.base.Engine ROLLBACK

OfferID在Python中的定义如下:

class Offers(Base):
    __tablename__ = 'offers2'
    OfferID = Column(Integer(), primary_key=True)

MySQL表架构是:

-- auto-generated definition
CREATE TABLE offers2
(
  OfferID INT AUTO_INCREMENT
    PRIMARY KEY
);

有谁能帮我理解这个问题以及如何追踪它?你知道吗

offers表包含更多的列,但我尝试将它与主键配对,以确定是否可以隔离问题,但它仍然存在。你知道吗


Tags: info数据库basesqlalchemymysqlsqlite3engineclass
1条回答
网友
1楼 · 发布于 2024-09-24 16:31:42

对于那些通过搜索相同错误输出而偶然发现此问题的人:

经过一些实验,我发现如果我打开echo来查看查询,然后获取SQL插入字符串并尝试在mySQL控制台中应用它,代码就可以工作了。你知道吗

这让我得出了这样的结论:这个问题要么存在于SQLAlchemy中,要么存在于我使用的pymysql连接中,因此我尝试将pymysql更改为mySQLdb,结果发现查询按预期工作,并且与我之前在SQLite3中使用数据库时的工作一样。你知道吗

相关问题 更多 >