Python SQLAlchemy强制左连接

Python SQLAlchemy强制左连接,python,sqlalchemy,Python,Sqlalchemy,我有个小问题。我有两个SQL表(ip和客户机),由第三个表(ip_客户机)绑定。我没有使用SQLAlchemy附带的多对多关系,因为在我的一些查询中出现了复杂的过滤 除了一个愚蠢的用例外,一切都很好。我想列出所有没有客户端的IP,没有外部连接我就做不到 外部连接需要几秒钟的时间,而与左连接相同的查询是即时的。但无法避免SQL炼金术创建的内部连接。我尝试了所有的关系,并移动外键,但它保持了内部连接 基于同样的问题,每当我尝试列出所有IP,并用一列显示客户端数量时,查询不会返回0个客户端的IP(内部

我有个小问题。我有两个SQL表(ip和客户机),由第三个表(ip_客户机)绑定。我没有使用SQLAlchemy附带的多对多关系,因为在我的一些查询中出现了复杂的过滤

除了一个愚蠢的用例外,一切都很好。我想列出所有没有客户端的IP,没有外部连接我就做不到

外部连接需要几秒钟的时间,而与左连接相同的查询是即时的。但无法避免SQL炼金术创建的内部连接。我尝试了所有的关系,并移动外键,但它保持了内部连接

基于同样的问题,每当我尝试列出所有IP,并用一列显示客户端数量时,查询不会返回0个客户端的IP(内部联接的自然行为)

有没有办法强迫你这么做

顺便说一下,这是我的问题:

query = (session.query(Ip, func.count(Client.id))
    .join(ClientIp, ClientIp.ip_id==Ip.id)
    .join(Client, Client.id==ClientIp.client_id)
    .group_by(Ip.id))
在查询创建或连接函数中是否有强制左连接的技巧?

只要在适当的情况下使用而不是
join

query = (session.query(Ip, func.count(Client.id)).
    outerjoin(ClientIp, ClientIp.ip_id==Ip.id).
    outerjoin(Client, Client.id==ClientIp.client_id).
    group_by(Ip.id)
)

外部联接的性能
是另一个问题,在
ForeignKey
列上设置
索引
可能会有很大帮助。

我创建了一个索引,现在速度非常快,但这并没有改变我的计数问题(第二个问题)。外部联接只返回0,内部联接只返回>0。如何仅在一个查询中检索所有内容?我认为您关于仅返回0的
外部联接的声明不正确。实际上,
外部联接
应该返回全部。你试过了吗?你是对的,我只在两个连接中的一个上做了外部连接。和他们中的两个一起工作很好。谢谢!