Flask-SQLAlchemy:关系查询和嵌套对象数据

时间:2018-03-14 10:42:54

标签: python sqlalchemy flask-sqlalchemy marshmallow

我正在使用Flask-SQLAlchemy在python RESTful-API上玩我在查询2表之间的1-M关系时遇到了结构,就像 Location(1)可能有很多建筑物(m) 这就是我所做的:

我的项目结构

project 
     model
         __init__.py
         location.py
         building.py
    resource     
         __init__.py
         location.py
         building.py
    schema
         __init__.py
         schema.py     
     app.py
     database.py 

这是我的模特:

class Building(db.Model):
    __tablename__ = 'building'
    building_code = db.Column(db.String(80), primary_key=True)
    building_name = db.Column(db.String(80))
    building_type = db.Column(db.String(80))
    location_code = db.Column(db.Integer, 
    db.ForeignKey("location.location_code"), nullable=False)
    locations = db.relationship("Location", back_populates="buildings", 
    lazy='joined')

class Location(db.Model):
    __tablename__ = 'location'
    location_code = db.Column(db.String(80), primary_key=True, nullable=False)
    location_name = db.Column(db.String(80))
    latitude = db.Column(db.String(80))
    longitude = db.Column(db.String(80))
    buildings = db.relationship("Building", back_populates="locations", 
    lazy='joined')

这是我的资源:

class BuildingList(Resource):
    def get(self):
        buildings = buildingModel.query.all()
        results = buildings_schema.dump(buildings)
        print(results)

class LocationList(Resource):
    def get(self):
        locations = locationModel.query.all()
        results = locations_schema.dump(locations)
        print(results)

当我尝试“GET”/ BuildingList时,没有错误,但是在Location()模型中没有完成。这就是我得到的“location_code”:[{},{},{},{},{},{},{},{}], 完全无效

我正在尝试将结果作为嵌套对象,例如构建{building_code:“X”,building_name:“Y”,building_type:“Z”,location_code:{LocationModel}}。例如。 我尝试打印 buildingModel.query - 它已经是SQL加入命令我认为问题在于映射对象作为我的理解,可能我错了

提前谢谢

1 个答案:

答案 0 :(得分:0)

要查询数据库,必须首先在Flask代码中创建其类定义的对象。

从您的代码中,应查询class Buildingclass Location。所以应该是这样的:

class BuildingList(Resource):
def get(self):
    buildings = Building.query.all()
    results = buildings_schema.dump(buildings)
    print(results)

class LocationList(Resource):
def get(self):
    locations = Location.query.all()
    results = locations_schema.dump(locations)
    print(results)

我的代码中没有buildingModellocationModel的任何定义。