API запросов к фляге, JSON - PullRequest
0 голосов
/ 02 мая 2018

Я использую 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. Вот почему появился только один пункт, а когда я попробовал больше, это не так. Я использовал зефир (пакет сериализации объектов).

...