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(Binary Large OBject)タイプとして:

    image = db.Column(LargeBinary)
    

    その場合、SQLAlchemyはデータを取得するときに期待どおりにバイトを返す必要があります。

    既存のデータベースの列宣言を変更する場合は、フラスコの移行 、またはpsqlコンソールで直接:

     ALTER TABLE ads ALTER COLUMN image TYPE bytea USING image::bytea;
    

    *これはsqliteで機能しますが、Postgresqlでは正しくラウンドトリップしません-この回答> これに関する詳細については。




    1. PHP-ネストされたリストが偶数列に分割されました(修正と更新)

    2. SQLクエリでの集計関数の使用

    3. 日時をSQLサーバー(日時タイプ)に保存する場合、どの形式で保存しますか?

    4. レコードのDELETEとともにジャンクションデータを自動的に削除しますか?