image
sloupec je deklarován jako znak data o maximální délce 100, ale předáváte podstatně více než 100 bajtů binárního údaje:
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'
Pokud používáte Postgresql, mohli byste deklarovat image
bez určení délky:
image = db.Column(db.String)
ale můžete zjistit, že máte potíže se zpracováním dat při návratu z databáze*.
Bylo by lepší deklarovat image
jako typ BLOB (Binary Large OBject):
image = db.Column(LargeBinary)
pak by SQLAlchemy měla při načítání dat vracet bajty podle očekávání.
Pokud změníte deklaraci sloupců pro existující databázi, budete muset změnu aplikovat na samotnou databázi, buď pomocí nástroje jako Migrace z lahvičky nebo přímo v konzole psql:
ALTER TABLE ads ALTER COLUMN image TYPE bytea USING image::bytea;
* Bude to fungovat pro sqlite, ale nebude to fungovat správně v Postgresql – viz tato odpověď pro další diskusi o tomto.