Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Flask Sqlalchmey-棉花糖嵌套架构对于具有筛选器(where)条件的联接失败_Python_Serialization_Flask Sqlalchemy_Marshmallow_Marshmallow Sqlalchemy - Fatal编程技术网

Python Flask Sqlalchmey-棉花糖嵌套架构对于具有筛选器(where)条件的联接失败

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

我目前正在制作一个带有get请求的API,以返回模型的联合json数据,该数据使用flask、sqlalchemy和flask sqlalchemy以及flask marshmallow建立关系。我在使用“全选”和“选择特定数据”时没有问题,但在使用联接时有问题。谁能告诉我我犯了什么错误

数据库模型

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)。因此,您可以获得棉花糖模式正确填充所需的所有数据。查看此线程以获得一个很好的示例:

[
  {}, 
  {}, 
  {}, 
  {}, 
  {}, 
  {}, 
  {}, 
  {}, 
  {}, 
  {}, 
  {}, 
  {}, 
  {}, 
  {}, 
  {}, 
  {}, 
  {}
]