image
kolumna jest zadeklarowana jako znak dane o maksymalnej długości 100, ale przesyłasz znacznie więcej niż 100 bajtów binarnych dane:
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'
Ponieważ używasz Postgresql, możesz zadeklaruj image
bez określania długości:
image = db.Column(db.String)
ale może się okazać, że masz trudności z obsługą danych po powrocie z bazy danych*.
Lepiej byłoby zadeklarować image
jako typ BLOB (Binary Large OBject):
image = db.Column(LargeBinary)
wtedy SQLAlchemy powinien zwracać bajty zgodnie z oczekiwaniami podczas pobierania danych.
Jeśli zmienisz deklarację kolumny dla istniejącej bazy danych, będziesz musiał zastosować zmianę do samej bazy danych, używając narzędzia takiego jak Migracja kolby lub bezpośrednio w konsoli psql:
ALTER TABLE ads ALTER COLUMN image TYPE bytea USING image::bytea;
* To zadziała w przypadku sqlite, ale nie będzie działać poprawnie w Postgresql — zobacz tę odpowiedź więcej dyskusji na ten temat.