J'ai migré une base de données de SQLite3 vers MySQL. La plupart d'entre elle fonctionne bien, mais sur une table je reçois l'erreur suivante lorsque vous essayez d'ajouter une ligne:Trouver la cause d'une erreur TypeError en utilisant Sqlalchemy dans Python 3 pour l'insérer dans 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,)]
J'ai essayé turation sur l'écho de voir ce qu'il fait et c'est là, il échoue:
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
Le OfferID est défini en tant que tel dans le python:
class Offers(Base):
__tablename__ = 'offers2'
OfferID = Column(Integer(), primary_key=True)
Le schéma de la table MySQL est:
-- auto-generated definition
CREATE TABLE offers2
(
OfferID INT AUTO_INCREMENT
PRIMARY KEY
);
Quelqu'un peut-il m'aider à comprendre le problème et comment le retracer?
La table des offres contenait beaucoup plus de colonnes, mais j'ai essayé de la relier à la clé primaire pour voir si je pouvais isoler le problème, mais il reste quand même.
Que se passe-t-il lorsque vous insérez explicitement des valeurs pour d'autres colonnes dans la table mais que la clé primaire OfferID s'incrémente automatiquement? Votre intention est-elle vraiment d'utiliser une valeur générée de l'extérieur pour la clé primaire? –
Don, la requête d'origine n'a pas explicitement entrer une valeur pour l'OfferID - il a été défini sur autoincrement, et il a toujours généré le même problème. Quelque chose que j'aurais dû mentionner; si j'active echo pour afficher la requête, et que je prends la chaîne de requête, je peux l'insérer correctement si je la copie dans la console et l'exécute, mais je dois changer None values en Null. Dans cet esprit, j'ai essayé d'insérer les enregistrements en m'assurant qu'il n'y avait pas de null et l'erreur apparaît toujours, me faisant penser que cela peut être un problème avec pymysql ou sqlalchemy. – pa1983