Сериализация геометрии с помощью колбы-зефира - PullRequest
0 голосов
/ 09 октября 2019

У меня есть модель sqlalchemy2 (с расширением геоалхимии), содержащая тип данных геометрии, такой как:

class Estate(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    geom = db.Column(Geometry(geometry_type='POLYGON')
    user_id = db.Column(db.Integer, db.ForeignKey('users.id'))
    user = db.relationship('Users', backref='estates')

и схема зефира:

class EstateSchema(ma.ModelSchema):
    class Meta:
        model = Estates

, но при попытке сериализации я получилследующая ошибка:

marshmallow_sqlalchemy.exceptions.ModelConversionError: Could not find field column of type <class 'geoalchemy2.types.Geometry'>.

ModelConversion, жалующийся на WKBElement, потому что не определен как общее поле.

Вопрос в том, как я могу изменить код, чтобы получить(де) сериализатор, работающий с полем модели Geometry?

1 Ответ

0 голосов
/ 09 октября 2019

marshmallow_sqlalchemy не знаю, как сериализовать поле geom типа Geometry. Это потому, что GeoAlchemy напрямую не поддерживается в marshmallow. Чтобы решить эту проблему, вам нужно написать пользовательский ModelConverter, который сообщает marshmallow, как сериализовать поле типа Geometry.

from geoalchemy2.types import Geometry as GeometryType
from marshmallow_sqlchemy.convert import ModelConverter as BaseModelConverter


class ModelConverter(BaseModelConverter):
    SQLA_TYPE_MAPPING = {
        **BaseModelConverter.SQLA_TYPE_MAPPING,
        **{GeometryType: fields.Field()},
    }


class EstateSchema(ma.ModelSchema):
    class Meta:
        model = Estates
        model_converter = ModelConverter

То же самое было упомянуто в репозитории github зефир-SQLAlchemy

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...