#python #json #flask #flask-sqlalchemy
#python #json #flask #flask-sqlalchemy
Вопрос:
Я использую Flask 1.1.2 и Flask-SQLAlchemy 2.4.4 для создания RESTful service.
Я хочу, чтобы все мои классы моделей были сериализуемыми, и поэтому написал базовый класс, от которого происходят мои модели. В моем сериализуемом классе метод as_dict()
возвращает строковое значение столбца. Тем не менее, я хочу изменить метод, чтобы:
- Возвращать целые числа и числа с плавающей точкой (не их строковую версию)
- Логические типы, которые должны быть возвращены в допустимом формате 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