Я использую API фляги в качестве точки отдыха для моего приложения Angular. В настоящее время я тестирую API. Я проверил свою /users
точку, чтобы убедиться, что у меня есть все пользователи.
//importing db, app, models, schema etc.
from flask import jsonify, request
@app.route('/users')
def get_users():
# fetching from database
users_objects = User.query.all()
# transforming into JSON-serializable objects
users_schema = UserSchema(many=True)
result = users_schema.dump(users_objects)
# serializing as JSON
return jsonify(result.data)
Это сработало. Тем не менее, теперь, когда я пытаюсь получить другие данные (в которых содержится более 9000 объектов ... это не работает (когда я пытаюсь запросить их все). Сначала я просто схватил первый элемент
@app.route('/aggregated-measurements')
def get_aggregated_measurements():
aggregated_measurements_objects = AggregatedMeasurement.query.first()
# transforming into JSON-serializable objects
aggregated_measurement_schema = AggregatedMeasurementSchema()
result = aggregated_measurement_schema.dump(aggregated_measurements_objects)
return jsonify(result.data)
Это показало мне первое Агрегированное Измерение. Однако , когда я пытаюсь запросить все из них aggregated_measurements_objects = AggregatedMeasurement.query.all()
Ничего не отображается. Я сделал то же самое на своем ноутбуке Jupyter и , который отобразил их. Затем я подумал, что, возможно, это слишком много информации, поэтому я попытался ограничить запрос следующим образом aggregated_measurements_objects = AggregatedMeasurement.query.all()[:5]
. Это работает на ноутбуке Jupyter, но ничего не отображается, когда я иду по маршруту.
Я не понимаю, почему, когда я достигаю точки /users
, я вижу их все, но когда я пытаюсь сделать то же самое для aggregated-measurements
, я ничего не получаю (даже когда я ограничиваю запрос). Я использую flask_sqlalchemy с sqlite db.
** обновление с моделью и схемой **
from datetime import datetime
# ... import db
import pandas as pd
from marshmallow import Schema, fields
class AggregatedMeasurement(db.Model):
id = db.Column(db.Integer, primary_key=True)
created = db.Column(db.DateTime, nullable=False, default=datetime.utcnow)
time = db.Column(db.DateTime, nullable=False)
speed = db.Column(db.Float, nullable=False)
direction = db.Column(db.Float, nullable=False)
# related fields
point_id = db.Column(db.Integer, db.ForeignKey('point.id'), nullable=False)
point = db.relationship('Point',backref=db.backref('aggregated_measurements', lazy=True))
class AggregatedMeasurementSchema(Schema):
id = fields.Int(dump_only=True)
time = fields.DateTime()
speed = fields.Number()
direction = fields.Number()
point_id = fields.Number()
ВТОРОЕ ОБНОВЛЕНИЕ обнаружена ошибка.
Убедившись, что это действительно удар по БД (спасибо @gbozee), я заметил, что на маршруте /aggregated-measurements
, когда я создавал схему, я делал это только для одного объекта. Я забыл включить many = True , как я сделал в users_schema. Вот почему появился только один пункт, а когда я попробовал больше, это не так. Я использовал зефир (пакет сериализации объектов).