De image
kolom is gedeclareerd als karakter gegevens met een maximale lengte van 100, maar u passeert aanzienlijk meer dan 100 bytes binair gegevens:
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'
Aangezien u Postgresql gebruikt, zou declareren image
zonder een lengte op te geven:
image = db.Column(db.String)
maar het kan zijn dat u problemen ondervindt bij het verwerken van de gegevens wanneer deze uit de database* worden geretourneerd.
Het zou beter zijn om image
. te declareren als een BLOB-type (Binary Large OBject):
image = db.Column(LargeBinary)
dan zou SQLAlchemy bytes moeten retourneren zoals verwacht bij het ophalen van gegevens.
Als u de kolomdeclaratie voor een bestaande database wijzigt, moet u de wijziging toepassen op de database zelf, ofwel met een tool zoals Flask migreren , of rechtstreeks in de psql-console:
ALTER TABLE ads ALTER COLUMN image TYPE bytea USING image::bytea;
* Dit werkt voor sqlite, maar wordt niet correct teruggestuurd in Postgresql - zie dit antwoord voor meer discussie hierover.