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 (Binary Large OBject):

image = db.Column(LargeBinary)

тогава SQLAlchemy трябва да върне байтове според очакванията при извличане на данни.

Ако промените декларацията на колона за съществуваща база данни, ще трябва да приложите промяната към самата база данни или с помощта на инструмент като Migrate на Flask , или директно в 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. Rails нулира ВСИЧКИ последователности на Postgres?

  2. Използване на UUID с EclipseLink и PostgreSQL

  3. Може ли Postgres Commit да съществува в процедура, която има блок за изключение?

  4. Как да открия основната заявка на материализиран изглед, който създадох?

  5. Свързването на 2 големи таблици на postgres с помощта на int8range не се мащабира добре