В SQLAlchemy HSTORE поддерживаются как тип, так и литералы hstore, но вы должны вручную импортировать расширение hstore, используя
from sqlalchemy.dialects.postgresql import HSTORE
from sqlalchemy.ext.mutable import MutableDict
После этого вы должны описать имя и тип столбца с помощью hstore
form_data = db.Column(MutableDict.as_mutable(HSTORE))
Словари Python должны храниться внутри столбцов, используя MutableDict
во Flask (sqlalchemy)
Поэтому ваш код необходимо изменить как
from sqlalchemy.dialects import postgresql
from sqlalchemy.dialects.postgresql import HSTORE
from sqlalchemy.ext.mutable import MutableDict
#.........
class Submission(db.Model):
id = db.Column(db.Integer, primary_key=True)
form_id = db.Column(db.Integer, db.ForeignKey('form.id'))
origin = db.Column(db.String())
form_data = db.Column(MutableDict.as_mutable(HSTORE))
timestamp = db.Column(db.DateTime, index=True, default=datetime.utcnow)
Также не забудьте создать Hstore
расширение для вашей базы данных следующим образом
вход в psql postgres из командной строки
sudo -u postgres psql
Предполагая, что вы создали необходимую базу данных под ролью postgres, допустим, db_test
- это база данных
Подключение к db_test
postgres=# \c db_test
Теперь вы должны быть подключены к db_test
Создать расширение hstore
db_test=# CREATE EXTENSION hstore;
Расширение hstore должно быть успешно создано, перечислить списокрасширения, установленные в вашей базе данных с помощью
db_test=# \dx
Надеюсь, это решит вашу проблему