Python 无法填充自加载关系
我正在尝试使用contains\u eager选项加载一个self-relation属性,以避免在使用一个关系列进行排序或搜索时出现两个连接。我的模型对象如下所示:Python 无法填充自加载关系,python,sqlalchemy,Python,Sqlalchemy,我正在尝试使用contains\u eager选项加载一个self-relation属性,以避免在使用一个关系列进行排序或搜索时出现两个连接。我的模型对象如下所示: class Usuario(DeclarativeBase): __tablename__ = 'usuarios' __table_args__ = {'mysql_engine':'InnoDB'} id=Column(Integer, primary_key=True) usuario=Col
class Usuario(DeclarativeBase):
__tablename__ = 'usuarios'
__table_args__ = {'mysql_engine':'InnoDB'}
id=Column(Integer, primary_key=True)
usuario=Column(Text)
...
resellers_id=Column(Integer, ForeignKey('usuarios.id'))
....
reseller = relation('Usuario', remote_side = [id])
我正在使用以获取数据:
u= DBSession.query(Usuario).options(contains_eager('reseller'))\
.outerjoin(self.usuarios_padre, Usuario.resellers_id == self.usuarios_padre.id)\
.filter(Usuario.id=1)\
.order_by(self.usuarios_padre.usuario).one()
其中,self.usuarios\u padre是Usuario的一个别名
如果我访问u.reseller.usuario我会从父公司获得与u.usuario相同的usuario
知道问题出在哪里吗?我尝试使用lazy=“joined”定义关系,但没有结果
关于问题在于,在一个查询中加载两组
Usuario
对象,为了解决此问题,需要使用,然后明确地指定联接
中的别名父对象,并且包含\u eager
:
qry = session.query(Usuario).filter(Usuario.id==1)
# join using the aliased. Use *outerjoin* in order to still get the result for those without a parent
res = aliased(Usuario)
qry = qry.outerjoin((res, Usuario.reseller))
# specify which table/alias represents the *contained* relationship
qry = qry.options(contains_eager(Usuario.reseller, alias=res))