image
kolonne erklæres som værende tegn data med en maksimal længde på 100, men du passerer betydeligt mere end 100 bytes binær data:
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'
Når du bruger Postgresql, kunne du erklære image
uden at angive en længde:
image = db.Column(db.String)
men du kan opleve, at du har problemer med at håndtere dataene, når de returneres fra databasen*.
Det ville være bedre at erklære image
som en BLOB (Binary Large OBject) type:
image = db.Column(LargeBinary)
så skal SQLAlchemy returnere bytes som forventet, når data hentes.
Hvis du ændrer kolonneerklæringen for en eksisterende database, skal du anvende ændringen på selve databasen, enten ved at bruge et værktøj som Migrering af kolbe , eller direkte i psql-konsollen:
ALTER TABLE ads ALTER COLUMN image TYPE bytea USING image::bytea;
* Dette vil fungere for sqlite, men vil ikke rundrejse korrekt i Postgresql - se dette svar for mere diskussion omkring dette.