私はsqlalchemyで非常に新しいです。
結合条件を書き直すことなく、outerjoin の 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)
期待どおり、2 番目のテーブルに ON 句が返されます。しかし、どうすれば 2 番目のテーブルに別のフィルターを配置できますか?
句を使用しようとしましfilter
たが、新しい条件がwhere
in 句ではなく に配置され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句を完全に書き直さずにこれを行う方法はありますか?
ありがとう