PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

sqlalchemy.exc.DataError को कैसे ठीक करें:(psycopg2.errors.StringDataRightTruncation)?

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 में सही ढंग से राउंड-ट्रिप नहीं करेगा - देखें यह उत्तर इसके बारे में अधिक चर्चा के लिए।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. java.lang.ClassNotFoundException:org.postgresql.Driver, Android

  2. ट्रिगर फ़ंक्शन में पंक्ति प्रकार के डायनामिक कॉलम नाम तक पहुंचें

  3. पोस्टग्रेस्क्ल में एक सीएसवी कैसे आयात करें जिसमें पहले से ही आईडी असाइन की गई है?

  4. हाइबरनेट अनुक्रम उत्पन्न नहीं हुआ

  5. postgresql 9.5:रिक्त स्थान के आधार पर एक स्ट्रिंग को दो क्षेत्रों में विभाजित करने का प्रयास कर रहा है