PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Cách sửa lỗi sqlalchemy.exc.DataError:(psycopg2.errors.StringDataRightTruncation)?

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.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. hợp nhất tất cả các cột hàng thành một cột duy nhất từ ​​bảng đã tham gia

  2. Làm cách nào để vùng chứa OpenShift tìm hiểu ID hình ảnh của nó?

  3. Postgres chỉ mục nhiều cột duy nhất cho bảng tham gia

  4. Thay đổi ngôn ngữ của hệ thống và thông báo lỗi trong PostgreSQL

  5. Oracle sang PostgreSQL:BẮT ĐẦU VỚI / KẾT NỐI BẰNG