image
колоната е декларирана като символ данни с максимална дължина 100, но вие предавате значително повече от 100 байта двоичен данни:
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'
Тъй като използвате Postgresql, вие можете декларирайте image
без посочване на дължина:
image = db.Column(db.String)
но може да откриете, че имате затруднения при обработката на данните, когато се върнат от базата данни*.
Би било по-добре да декларирате image
като тип BLOB (Binary Large OBject):
image = db.Column(LargeBinary)
тогава SQLAlchemy трябва да върне байтове според очакванията при извличане на данни.
Ако промените декларацията на колона за съществуваща база данни, ще трябва да приложите промяната към самата база данни или с помощта на инструмент като Migrate на Flask , или директно в psql конзолата:
ALTER TABLE ads ALTER COLUMN image TYPE bytea USING image::bytea;
* Това ще работи за sqlite, но няма да се върне правилно в Postgresql - вижте този отговор за повече дискусии по този въпрос.