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