Элементы запросов Flask API, JSON

Я использую API-интерфейс flask в качестве точки отдыха для моего приложения 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)

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

не могли бы вы вставить модель AggregatedMeasurement, чтобы предоставить больше информации.

gbozee 02.05.2018 10:27

также, если вы знакомы с pdb в python, вы можете поставить точку останова сразу после aggregated_measurements_objects = AggregatedMeasurement.query.all() в вашем представлении, чтобы убедиться, что выполняется вызов базы данных aggregated_measurements_objects = AggregatedMeasurement.query.first();import pdb; pdb.set_trace()

gbozee 02.05.2018 10:30

@gbozee Я обновил пост. Нет, я не знаком с pdb в Python, но я попробую. Спасибо

nrvaller 02.05.2018 10:38

Поскольку форматировать код в разделе комментариев сложно, я создал суть, показывающую, что вам нужно сделать. gist.github.com/gbozee/cb516b022ba4fbc865905fc38702c5b5

gbozee 02.05.2018 10:43

Как только точка останова была установлена, я проверил aggregated_measurement_objects, и он дал мне объект с соответствующей информацией из базы данных для этого конкретного объекта. @gbozee

nrvaller 02.05.2018 11:25

Я только что проверил с помощью `aggregated_measurements_objects = AggregatedMeasurement.query.all ()` и увидел все свои объекты на моей консоли ... хм. Он попадает в мою базу данных, но когда я попадаю в точку, он пуст (только для агрегированных измерений, для пользователей я вижу все в /users. Я собираюсь дважды проверить свои маршруты.

nrvaller 02.05.2018 11:33
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
6
52
0

Другие вопросы по теме