1
我已将工作数据库从SQLite3迁移到MySQL。大多数的效果很好,但对一个表我在尝试添加一行时,出现以下错误:在Python 3中使用Sqlalchemy插入到MySQL中找到TypeError的原因
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,)]
我试图回声,看看它在做什么图灵而这正是它失败:
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
);
任何人都可以帮助我理解问题以及如何追踪它?
这个offer表中包含更多的列,但我试着将它与主键配对,看看我是否可以找出问题,但仍然存在。
当您为表格中的其他列显式插入值而让OfferID主键自动增加时会发生什么?你的意图确实是为主键使用外部生成的值吗? –
不,原来的查询没有明确输入OfferID的值 - 它被设置为自动增量,并且它仍然产生相同的问题。我应该提到的东西;如果我打开回声查看查询,并采取查询字符串我可以得到它插入正确,如果我将它复制到控制台并运行它,但我必须将无值更改为空。考虑到这一点,我尝试插入记录以确保没有空值,并且仍然出现错误,这让我认为这可能是pymysql或sqlalchemy的问题。 – pa1983