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(Binary Large OBject)タイプとして:
image = db.Column(LargeBinary)
その場合、SQLAlchemyはデータを取得するときに期待どおりにバイトを返す必要があります。
既存のデータベースの列宣言を変更する場合は、フラスコの移行 、またはpsqlコンソールで直接:
ALTER TABLE ads ALTER COLUMN image TYPE bytea USING image::bytea;
*これはsqliteで機能しますが、Postgresqlでは正しくラウンドトリップしません-