Python 使用SQLAlchemy ORM根据多对一关系中的一个对象过滤查询

Python 使用SQLAlchemy ORM根据多对一关系中的一个对象过滤查询,python,mysql,sqlalchemy,Python,Mysql,Sqlalchemy,所以我有一个桌上推车和另一个桌上推车。购物车连接到购物车项目,如伪代码中所示 购物车:购物车id=1 购物车商品:id=12,购物车id=1,库存=False 购物车商品:id=13,购物车id=1,库存=False 购物车商品:id=14,购物车id=1,库存=False 我想查询至少有一个购物车库存值为True的购物车项目的所有购物车 购物车:购物车id=1 购物车:购物车id=2 购物车商品:id=12,购物车id=1,库存=False 购物车商品:id=13,购物车id=1,库存=Fal

所以我有一个桌上推车和另一个桌上推车。购物车连接到购物车项目,如伪代码中所示

购物车:购物车id=1

购物车商品:id=12,购物车id=1,库存=False

购物车商品:id=13,购物车id=1,库存=False

购物车商品:id=14,购物车id=1,库存=False

我想查询至少有一个购物车库存值为True的购物车项目的所有购物车

购物车:购物车id=1

购物车:购物车id=2

购物车商品:id=12,购物车id=1,库存=False

购物车商品:id=13,购物车id=1,库存=False

购物车商品:id=14,购物车id=1,库存=False

购物车项目:id=15,购物车id=2,库存=True

购物车商品:id=16,购物车id=2,库存=False

购物车商品:id=17,购物车id=2,库存=False

因此,给定此数据集,将返回cart_id=2的cart

另外,我应该提到,我知道我可以查询和检索所有对象,然后对该插入指令的列表进行操作,以筛选出所有不符合此要求的对象,但实际上我需要以查询的形式检索此数据,因为在这个web应用程序中分页是如何处理的

如果我可以在下面的模型中定义某种属性,那将是理想的。但我敢肯定,目前的情况是行不通的

@property
def cart_has_in_stock(self):
    has_in_stock = False
    for item in self.cart.items:
      if item.in_stock:
        has_in_stock = True
    return has_in_stock
我刚刚想出了一个简单的SQL查询来实现这一点,我现在需要帮助将其转移到SQLAlchemy。我不太擅长炼金术

查询:选择*from cart\u items where cart\u items.cart\u id IN select cart.id from cart\u items as item internal JOIN carts as cart on item.cart\u id=cart.id where item.stage='stock'组by cart.id\G

我明白了

sub_q = model.Session.query(model.Cart.id).\
        join(model.CartItem, model.Cart.id == model.CartItem.cart_id).\
        filter(
            model.CartItem.stage == 'stock'
        ).\
        group_by(model.Cart.id).\
        subquery()
更正\u q=model.Session.querymodel.Cart.filtermodel.Cart.id.in\u sub\u q

我找到了答案

sub_q = model.Session.query(model.Cart.id).\
        join(model.CartItem, model.Cart.id == model.CartItem.cart_id).\
        filter(
            model.CartItem.stage == 'stock'
        ).\
        group_by(model.Cart.id).\
        subquery()
更正\u q=model.Session.querymodel.Cart.filtermodel.Cart.id.in\u sub\u q