Сериализуемые объекты Flask-SQLAlchemy с целочисленными, плавающими и логическими типами в JSON

#python #json #flask #flask-sqlalchemy

#python #json #flask #flask-sqlalchemy

Вопрос:

Я использую Flask 1.1.2 и Flask-SQLAlchemy 2.4.4 для создания RESTful service.

Я хочу, чтобы все мои классы моделей были сериализуемыми, и поэтому написал базовый класс, от которого происходят мои модели. В моем сериализуемом классе метод as_dict() возвращает строковое значение столбца. Тем не менее, я хочу изменить метод, чтобы:

  1. Возвращать целые числа и числа с плавающей точкой (не их строковую версию)
  2. Логические типы, которые должны быть возвращены в допустимом формате JSON (т. Е. true, false)

Пока это мой код:

 class Serializable():
    def as_dict(self):
        return {c.name: str(getattr(self, c.name)) for c in self.__table__.columns}
    
 
class DataFrequency(db.Model, Serializable):
    __tablename__ = 'data_frequency'
    __table_args__ = (
        db.CheckConstraint('period > 0'),
    )

    id = db.Column(db.Integer, primary_key=True, server_default=text("nextval('data_frequency_id_seq'::regclass)"))
    period = db.Column(db.Integer, nullable=False)
    name = db.Column(db.Text, nullable=False, unique=True)
  

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

Ответ №1:

вы можете использовать column.type.python_type для приведения значения столбца, например. c.type.python_type("1") вернет 1 вместо «1», если тип равен int