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

使用Python3中的Sqlalchemy插入MySQL查找类型错误的原因,python,mysql,sqlalchemy,python-3.5,Python,Mysql,Sqlalchemy,Python 3.5,我已经将一个工作数据库从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)'] [par

我已经将一个工作数据库从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,)]
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
);
有人能帮我理解这个问题以及如何追踪它吗


“提供”表包含更多的列,但我尝试将其与主键配对,以确定是否可以隔离问题,但问题仍然存在。

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

经过一些实验,我发现如果我打开echo来查看查询,然后获取sqlinsert字符串并尝试在mySQL控制台中应用它,代码就会正常工作


这让我得出结论,问题一定出在SQLAlchemy或我使用的pymysql连接上,因此我尝试将pymysql更改为mySQLdb,发现查询工作正常,正如我之前在SQLite3中使用数据库时所做的那样。

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

经过一些实验,我发现如果我打开echo来查看查询,然后获取sqlinsert字符串并尝试在mySQL控制台中应用它,代码就会正常工作


这让我得出结论,问题一定出在SQLAlchemy或我使用的pymysql连接上,因此我尝试将pymysql更改为mySQLdb,发现查询工作正常,正如我之前在SQLite3中使用数据库时所做的那样。

当您显式地为表中的其他列插入值,但让提供的主键自动递增时,会发生什么情况?您真的打算为主键使用外部生成的值吗?Don,原始查询没有显式地为OfferID输入值-它被设置为autoincrement,但仍然生成相同的问题。一些我应该提到的事情;如果我打开echo来查看查询,并获取查询字符串,那么如果我将其复制到控制台并运行它,我可以正确插入它,但是我必须将None值更改为Null。考虑到这一点,我尝试插入记录以确保没有空值,错误仍然出现,这让我认为这可能是pymysql或sqlalchemy的问题。如果显式插入表中其他列的值,但让提供的主键自动递增,会发生什么情况?您真的打算为主键使用外部生成的值吗?Don,原始查询没有显式地为OfferID输入值-它被设置为autoincrement,但仍然生成相同的问题。一些我应该提到的事情;如果我打开echo来查看查询,并获取查询字符串,那么如果我将其复制到控制台并运行它,我可以正确插入它,但是我必须将None值更改为Null。考虑到这一点,我尝试插入记录以确保没有空值,错误仍然出现,这让我认为这可能是pymysql或sqlalchemy的问题。
-- auto-generated definition
CREATE TABLE offers2
(
  OfferID INT AUTO_INCREMENT
    PRIMARY KEY
);