Python Flask Sqlalchmey-棉花糖嵌套架构对于具有筛选器(where)条件的联接失败
我目前正在制作一个带有get请求的API,以返回模型的联合json数据,该数据使用flask、sqlalchemy和flask sqlalchemy以及flask marshmallow建立关系。我在使用“全选”和“选择特定数据”时没有问题,但在使用联接时有问题。谁能告诉我我犯了什么错误 数据库模型Python Flask Sqlalchmey-棉花糖嵌套架构对于具有筛选器(where)条件的联接失败,python,serialization,flask-sqlalchemy,marshmallow,marshmallow-sqlalchemy,Python,Serialization,Flask Sqlalchemy,Marshmallow,Marshmallow Sqlalchemy,我目前正在制作一个带有get请求的API,以返回模型的联合json数据,该数据使用flask、sqlalchemy和flask sqlalchemy以及flask marshmallow建立关系。我在使用“全选”和“选择特定数据”时没有问题,但在使用联接时有问题。谁能告诉我我犯了什么错误 数据库模型 class orderinfo(db.Model): __tablename__ = 'orderinfo' id = db.Column(db.Integer,au
class orderinfo(db.Model):
__tablename__ = 'orderinfo'
id = db.Column(db.Integer,autoincrement=True, primary_key=True)
ordernumber = db.Column(db.String, unique=True)
orderdate = db.Column(db.DateTime, nullable = False)
storage_duration = db.Column(db.String(50),nullable=False)
quantity = db.Column(db.Integer, nullable = False)
trays = db.relationship('Traydetails', backref="orderinfo",lazy='dynamic')
class Traydetails(db.Model):
__tablename__ = 'traydetails'
id= db.Column(db.Integer,autoincrement=True, primary_key=True)
traynumber = db.Column(db.String, unique=True)
orderid= db.Column(db.Integer, db.ForeignKey('orderinfo.id'))
traystatus = db.Column(db.String , nullable = False)
tests = db.relationship('Testinfo', backref="Traydetails",lazy='dynamic')
class Testinfo(db.Model):
__tablename__ = 'testinfo'
id = db.Column(db.Integer,autoincrement=True, primary_key=True)
trayid = db.Column(db.Integer, db.ForeignKey('traydetails.id'))
test_started = db.Column(db.DateTime, nullable = True)
test_ended = db.Column(db.DateTime, nullable = True)
description = db.Column(db.String, nullable = True
模式
class orderinfoSchema(ma.Schema):
class Meta:
fields =('ordernumber','orderdate','storage_duration','quantity','trays')
ordered = True
trays = fields.Nested(TraydetailsSchema,many= True)
order_schema = orderinfoSchema()
orders_schema = orderinfoSchema(many = True)
class TraydetailsSchema(ma.Schema):
class Meta:
fields = ('traynumber','traystatus','tests','description')
ordered = True
tests = fields.Nested(TestinfoSchema,many= True)
tray_schema = TraydetailsSchema()
trays_schema = TraydetailsSchema(many=True)
class TestinfoSchema(ma.Schema):
class Meta:
fields =('trayid','test_started','test_ended','description')
ordered = True
test_schema = TestinfoSchema()
tests_schema = TestinfoSchema(many = True)
Sql:
选择orderinfo,Traydetails
来自orderinfo
traydeails.orderid=orderinfo.id上的内部联接traydeails,其中traydeails.traystatus='Reserved'
我正在尝试实现上面的sql语句,它提供了与我在Postgres中所寻找的完全相同的结果。但是,当我尝试使用marshmallow和sqlalchmey的相同场景时,它无法删除过滤器,Traydeails中的所有数据都出现在嵌套模式中,我只想在嵌套模式中实现filterdata
API:
在第一个场景中,我尝试了多个查询,因为我获取了嵌套模式中的所有数据,但未能删除筛选条件
@app.route('/traystatus/<status>',methods=['GET'])
def traystatus(status):
loaded=orderinfo.query.join(Traydetails,Traydetails.orderid==orderinfo.id).filter(Traydetails.traystatus==status).all()
result = orders_schema.dump(loaded)
return orders_schema.jsonify(result)
产出2:
[
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{}
]
您的查询具有联接,因此创建SQLAlchemy对象的元组。摆脱连接,只需查询通过关系和外键链接到其他表的OrderInfo模型(使用PascalCase)。因此,您可以获得棉花糖模式正确填充所需的所有数据。查看此线程以获得一个很好的示例:
[
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{}
]