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 (बाइनरी लार्ज OBject) प्रकार के रूप में:
image = db.Column(LargeBinary)
फिर SQLAlchemy को डेटा पुनर्प्राप्त करते समय अपेक्षित बाइट वापस करनी चाहिए।
यदि आप किसी मौजूदा डेटाबेस के लिए कॉलम घोषणा बदलते हैं, तो आपको डेटाबेस में परिवर्तन को लागू करने की आवश्यकता होगी, या तो फ्लास्क माइग्रेट , या सीधे psql कंसोल में:
ALTER TABLE ads ALTER COLUMN image TYPE bytea USING image::bytea;
* यह sqlite के लिए काम करेगा, लेकिन Postgresql में सही ढंग से राउंड-ट्रिप नहीं करेगा - देखें यह उत्तर इसके बारे में अधिक चर्चा के लिए।