image
cột được khai báo là ký tự dữ liệu có độ dài tối đa là 100, nhưng bạn đang chuyển hơn 100 byte đáng kể của nhị phân dữ liệu:
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'
Sine bạn đang sử dụng Postgresql, bạn có thể khai báo image
mà không chỉ định độ dài:
image = db.Column(db.String)
nhưng bạn có thể thấy rằng bạn gặp khó khăn khi xử lý dữ liệu khi được trả về từ cơ sở dữ liệu *.
Sẽ tốt hơn nếu khai báo image
dưới dạng loại BLOB (Đối tượng lớn nhị phân):
image = db.Column(LargeBinary)
thì SQLAlchemy sẽ trả về byte như mong đợi khi truy xuất dữ liệu.
Nếu bạn thay đổi khai báo cột cho cơ sở dữ liệu hiện có, bạn sẽ cần áp dụng thay đổi cho chính cơ sở dữ liệu đó bằng cách sử dụng một công cụ như Di chuyển Hoa hoặc trực tiếp trong bảng điều khiển psql:
ALTER TABLE ads ALTER COLUMN image TYPE bytea USING image::bytea;
* Điều này sẽ hoạt động cho sqlite, nhưng sẽ không khứ hồi một cách chính xác trong Postgresql - hãy xem câu trả lời này để thảo luận thêm về vấn đề này.