image
kolumnen deklareras som tecken data med en maximal längd på 100, men du skickar betydligt mer än 100 byte binär data:
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'
Om du använder Postgresql, kan du deklarera image
utan att ange en längd:
image = db.Column(db.String)
men du kan upptäcka att du har svårt att hantera data när den returneras från databasen*.
Det skulle vara bättre att deklarera image
som en BLOB (Binary Large OBject) typ:
image = db.Column(LargeBinary)
då ska SQLAlchemy returnera bytes som förväntat när data hämtas.
Om du ändrar kolumndeklarationen för en befintlig databas måste du tillämpa ändringen på själva databasen, antingen med ett verktyg som Migrera kolv , eller direkt i psql-konsolen:
ALTER TABLE ads ALTER COLUMN image TYPE bytea USING image::bytea;
* Detta kommer att fungera för sqlite, men kommer inte att återvända korrekt i Postgresql - se det här svaret för mer diskussion kring detta.