image
kolom dinyatakan sebagai karakter data dengan panjang maksimum 100, tetapi Anda melewatkan lebih dari 100 byte biner 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'
Karena Anda menggunakan Postgresql, Anda bisa mendeklarasikan image
tanpa menentukan panjang:
image = db.Column(db.String)
tetapi Anda mungkin mengalami kesulitan menangani data saat dikembalikan dari database*.
Akan lebih baik untuk mendeklarasikan image
sebagai tipe BLOB (Binary Large OBject):
image = db.Column(LargeBinary)
maka SQLAlchemy harus mengembalikan byte seperti yang diharapkan saat mengambil data.
Jika Anda mengubah deklarasi kolom untuk database yang ada, Anda perlu menerapkan perubahan ke database itu sendiri, baik menggunakan alat seperti Migrasi Labu , atau langsung di konsol psql:
ALTER TABLE ads ALTER COLUMN image TYPE bytea USING image::bytea;
* Ini akan berfungsi untuk sqlite, tetapi tidak akan bolak-balik dengan benar di Postgresql - lihat jawaban ini untuk diskusi lebih lanjut tentang ini.