PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak naprawić błąd sqlalchemy.exc.DataError:(psycopg2.errors.StringDataRightTruncation)?

image kolumna jest zadeklarowana jako znak dane o maksymalnej długości 100, ale przesyłasz znacznie więcej niż 100 bajtów binarnych dane:

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'

Ponieważ używasz Postgresql, możesz zadeklaruj image bez określania długości:

image = db.Column(db.String)

ale może się okazać, że masz trudności z obsługą danych po powrocie z bazy danych*.

Lepiej byłoby zadeklarować image jako typ BLOB (Binary Large OBject):

image = db.Column(LargeBinary)

wtedy SQLAlchemy powinien zwracać bajty zgodnie z oczekiwaniami podczas pobierania danych.

Jeśli zmienisz deklarację kolumny dla istniejącej bazy danych, będziesz musiał zastosować zmianę do samej bazy danych, używając narzędzia takiego jak Migracja kolby lub bezpośrednio w konsoli psql:

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

* To zadziała w przypadku sqlite, ale nie będzie działać poprawnie w Postgresql — zobacz tę odpowiedź więcej dyskusji na ten temat.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. BŁĄD:niezaspokojone ograniczenia podczas instalacji PostGIS na obrazie Alpine Docker

  2. użyj \set zmiennej wewnątrz plpgsql zadeklaruj blok

  3. Porównaj varchar z char

  4. Jak uzyskać nazwy kolumn listy i typy danych tabeli w PostgreSQL?

  5. Tworzenie obiektów Django i sekwencje Postgres