我目前正在制作一个带有 get 请求的 API,以返回模型的连接 json 数据,该模型与 flask、sqlalchemy 和 flask-sqlalchemy 以及 flask-marshmallow 有关系。当我使用 while select all 时我没有问题,选择特定数据但我在使用连接时遇到问题。谁能指导我犯了什么错误。
数据库模型
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)
数据:
SELECT orderinfo,Traydetails FROM orderinfo INNER JOIN Traydetails ON Traydetails.orderid = orderinfo.id where Traydetails.traystatus = 'Reserved';
我正在尝试实现上述 sql 语句,它提供了与我在 Postgres 中寻找的完全相同的结果。但是当我用棉花糖和 sqlalchmey 尝试相同的场景时,它无法删除过滤器,并且来自 Traydetails 的所有数据都出现在嵌套模式中,我只想在嵌套模式中实现过滤器数据
接口:
我在第一个场景中尝试了多个查询我得到了嵌套模式中的所有数据,但无法删除过滤条件
@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)
第二个场景显示空列表
loaded = db.session.query(orderinfo,Traydetails).join(orderinfo).filter(Traydetails.traystatus == status,Traydetails.orderid == orderinfo.id).all()
输出 2:
[
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{}
]