Python 将连接打开的SQL查询转换为SQLAlchemy

Python 将连接打开的SQL查询转换为SQLAlchemy,python,sql,sqlalchemy,Python,Sql,Sqlalchemy,我的查询看起来是这样的(“3”和“4”在实际使用中当然会有所不同): 这是为了获取商品/订单组合生产中的所有阶段(操作)以及每个阶段的当前状态(进度)(如果存在状态条目)。如果不是,则仍然必须返回stage,但状态行必须为null 我在SQLAlchemy中玩这个游戏时遇到了沉浸式问题。这本来是一个由两部分组成的问题,但我找到了解决方法。现在在ORM中,这是一个不同的故事,我甚至不知道如何使用文档在条件下进行连接 编辑(不允许新用户回答自己的问题): 相信我解决了它,我想把它写下来作为一个问题是

我的查询看起来是这样的(“3”和“4”在实际使用中当然会有所不同):

这是为了获取商品/订单组合生产中的所有阶段(操作)以及每个阶段的当前状态(进度)(如果存在状态条目)。如果不是,则仍然必须返回stage,但状态行必须为null

我在SQLAlchemy中玩这个游戏时遇到了沉浸式问题。这本来是一个由两部分组成的问题,但我找到了解决方法。现在在ORM中,这是一个不同的故事,我甚至不知道如何使用文档在条件下进行连接

编辑(不允许新用户回答自己的问题):

相信我解决了它,我想把它写下来作为一个问题是有帮助的!也许这会对其他新手有所帮助

query = db.session.query(OpEntries, OpEntriesStatus).\
    outerjoin(OpEntriesStatus, db.and_(
        OpEntries.id == OpEntriesStatus.op_id,
        OpEntriesStatus.order_id == arg_order_id)).\
    filter(db.and_(
        OpEntries.op_artikel_id == artidQuery,
        OpEntries.active)).\
    order_by(OpEntries.id).\
    all()

如果有人有更好的解决方案或任何见解,我会保持开放状态。

假设有一些命名约定,下面应该可以做到:

qry = (session.query(OpEntry, OpEntryStatus)
        .join(OpEntryStatus, and_(OpEntry.id == OpEntryStatus.op_id, OpEntryStatus.order_id == 3))
        .filter(OpEntry.op_artikel_id == 4)
        .filter(OpEntry.active == 1)
        .order_by(OpEntry.id)
        )

有关联接的更多信息,请阅读,其中第二个参数是
onclause
。如果您需要1个以上的表达式,只需使用
创建您需要的任何表达式。

谢谢!在这种情况下,外套是必要的,但在其他方面,它看起来不错。但是我没有测试它。对不起,我偷了雷声。林克死了。也许应该改成?
qry = (session.query(OpEntry, OpEntryStatus)
        .join(OpEntryStatus, and_(OpEntry.id == OpEntryStatus.op_id, OpEntryStatus.order_id == 3))
        .filter(OpEntry.op_artikel_id == 4)
        .filter(OpEntry.active == 1)
        .order_by(OpEntry.id)
        )