我是 sqlalchemy 的新手。
我试图在外连接的 ON 子句中添加一些任意子句,而不必重写我的连接条件。
例如,让我们获取 2 个表:
class adm_funcionario(Base):
__tablename__ = "adm_funcionario"
idFuncionario = Column(Integer, nullable=False, primary_key=True, autoincrement=True)
nome = Column(VARCHAR(45), nullable=False)
foto = Column(BLOB)
apelido = Column(VARCHAR(32), default='')
class adm_funcionario_acesso(Base):
__tablename__ = "adm_funcionario_acesso"
idFuncionario = Column(Integer, ForeignKey('adm_funcionario.idFuncionario'), nullable=False, primary_key=True)
dataHora = Column(DATETIME, nullable=False, primary_key=True)
estacao = Column(VARCHAR(45), nullable=False)
idSessaoDB = Column(Integer, nullable=False)
如果我做:
qr = session.query(adm_funcionario).outerjoin(adm_funcionario_acesso)
print(qr)
它按预期返回第二个表中的 ON 子句。但是,我怎样才能在第二个表中放置另一个过滤器?
我尝试使用filter
子句,但它将新条件放在 中where
,而不是ON
子句中。
到目前为止,我发现的唯一解决方案是完全重写条件(sqlalchemy 知道如何进行连接,我只想在这个特定的表中增加一个新条件):
qr = session.query(adm_funcionario)
qr = qr.outerjoin(adm_funcionario_acesso, and_(adm_funcionario_acesso.idFuncionario==adm_funcionario.idFuncionario, adm_funcionario_acesso.idSessaoDB > 4))
有没有办法在不完全重写 ON 子句的情况下做到这一点?
谢谢