【问题标题】:Flask Sqlalchemy query using Joins and Filters使用连接和过滤器的 Flask Sqlalchemy 查询
【发布时间】:2020-11-04 00:50:21
【问题描述】:

您好,我正在尝试使用三个模型查询我的数据库,

产品、SalesDetails 和 SalesReturns

我想查询产品型号并只返回 id 不在的产品 销售详情 或者如果 SalesDetails.Sale_id 在 salesReturns.sale_id

基本上我想退回所有未售出或已退回的产品

我尝试过类似的方法

P1= Product.query.outerjoin(salesDetails)
P2=p1.outerjoin(SalesReturns)
P3=p2.filter(or_(SalesDetails.product_id==None,SalesDetails.sale_id==SalesReturn.sale_id)).all

问题是它返回所有产品 不管卖不卖,

我尝试通过两次销售相同产品并将 saleid 放入 salereturns 来测试它

但是即使第二次销售没有返回,查询也会返回所有产品。

我真的是数据库和 sqlalchemy 的初学者

如果您能提供帮助,我们将不胜感激。

如果你不明白我的意思,请在评论中问我。

谢谢。

【问题讨论】:

  • 我对 SQLAlchemy 一无所知,但您的过滤器似乎在说 product_id is null OR SalesDetails.sale_id==SalesReturn.sale_id。也许这需要是 AND 而不是 OR?
  • @Andrew 如果 ``` saleDetails.product_is 为 null 或 Salesreturn.sale_id ``` 不为空,则返回一行在表中的销售退货

标签: python sql python-3.x sqlalchemy flask-sqlalchemy


【解决方案1】:

我不太了解您的数据模型,但您可以这样做:

session.query(Product).outerjoin(SalesDetails, SalesDetails.product_id == None).\
outerjoin(SalesReturn, SalesReturn.sale_id == SalesDetails.sale_id).all()

【讨论】:

    猜你喜欢
    • 2016-05-08
    • 2017-06-08
    • 2019-12-13
    • 1970-01-01
    • 2018-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-10
    相关资源
    最近更新 更多