首页 > 解决方案 > 为什么我的过滤器在 python SQLAlchemy Flask 上不起作用?

问题描述

我正在尝试使用 Flask 和 SQLAlchemy 在 python 上创建一个 RESTful API。我编写的所有其他查询都有效,包括在某些资源上使用 get 和 pagination。但问题是我无法让一个特定的资源工作,而这只能通过查看building_id. 这building_id是在该特定表上多次出现的外键。

我确实得到了成功的响应,但数据字段为空,即结果行数为 0。

我非常想要这个作为 SQL Alchemy SELECT * from building_unit where building_id = X order by building_id

感谢您的任何帮助。

模型.py

class buildingUnit(db.Model):
    __tablename__ = 'building_unit'
    id = db.Column(db.Integer, primary_key=True)
    building_id = db.Column(db.Integer, nullable=False)
    unit_number = db.Column(db.Text, nullable=False)
    beds = db.Column(db.Integer, nullable=False)
    baths = db.Column(db.Float, nullable=False)
    sqft = db.Column(db.Float, nullable=False)
    price = db.Column(db.Float, nullable=False)
    def __init__(self, id, building_id, unit_number, beds, baths, sqft, price):
        self.id = id
        self.building_id = building_id
        self.unit_number = unit_number
        self.beds = beds
        self.baths = baths
        self.sqft = sqft
        self.price = price
class buildingUnitSchema(ma.Schema):
    id = fields.Integer()
    building_id = fields.Integer()
    unit_number = fields.String(required = False)
    beds = fields.Integer(required = False)
    baths = fields.Float(required = False)
    sqft = fields.Float(required = False)
    price = fields.Float(required = False)

building_unit.py

from flask import request
from flask_restful import Resource
from Model import db, buildingUnit, buildingUnitSchema
building_unit_schema = buildingUnitSchema()

class buildingUnitSingleResource(Resource):
    def get(self, building_id):
        building_unit = buildingUnit.query.filter(buildingUnit.building_id == building_id)
        building_unit = building_unit_schema.dump(building_unit).data
        return {'status': 'success', 'data': building_unit}, 200

app.py 路由

api.add_resource(buildingUnitSingleResource, '/building_unit/<int:building_id>')

标签: pythonrestflasksqlalchemyflask-sqlalchemy

解决方案


你可以尝试这样的事情:

building_unit = buildingUnit.query.get(building_id)

推荐阅读