La image
la columna se declara como carácter datos con una longitud máxima de 100, pero está pasando considerablemente más de 100 bytes de binary datos:
b'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x05V\x00\x00\x03\x00\x08\x06\x00\x00\x00\xcf><\xc2\x00\x00\x00\x01sRGB\x00\xae\xce\x1c\xe9\x00\x00\x00\x ... (1331901 characters truncated) ... 1l!+\x1d\xe9I6\xfa\x80*_n\xa7\x10\xf5c\x1e;\xf8:\xea\xb3c\xed\xd2+\xf3\xc6*\xa9\xbe\xbe\xde\xfe\x1f\x1e\xa5\xb3\xc5S^Y\x00\x00\x00\x00IEND\xaeB\x82'
Dado que está utilizando Postgresql, podría declarar image
sin especificar una longitud:
image = db.Column(db.String)
pero es posible que tenga dificultades para manejar los datos cuando los devuelve de la base de datos*.
Sería mejor declarar image
como tipo BLOB (Binary Large OBject):
image = db.Column(LargeBinary)
entonces SQLAlchemy debería devolver bytes como se esperaba al recuperar datos.
Si cambia la declaración de columna para una base de datos existente, deberá aplicar el cambio a la base de datos misma, ya sea usando una herramienta como Migración de Flask , o directamente en la consola psql:
ALTER TABLE ads ALTER COLUMN image TYPE bytea USING image::bytea;
* Esto funcionará para sqlite, pero no funcionará correctamente en Postgresql; consulte esta respuesta para más discusión sobre esto.