Hi,I have a self-referential table 'hierarchy' which has a 1:N relationship with a view 'arbeitsmittelhierarchy_arbeitsmittel_view'. They are defined as follows:
# generate a mapper of the self-referential table 'hierarchy' HierarchyTable = Table('hierarchy', metadata,Column('parentid', Integer, ForeignKey('hierarchy.id')),
autoload=True) AMH_View = Table('arbeitsmittelhierarchy_arbeitsmittel_view', metadata, autoload=True) arbeitsmittelhierarchy_arbeitsmittel_view.idhierarchy references hierarchy.id The mapper code is: class HierarchyNode(MappedClassBase): pass mapper(HierarchyNode, HierarchyTable, properties={ 'children' : relation( HierarchyNode,primaryjoin=and_(HierarchyTable.c.parentid==HierarchyTable.c.id, HierarchyTable.c.deleted==False),
cascade="all",backref=backref("parent", remote_side=[HierarchyTable.c.id])
), 'parent' : relation( HierarchyNode, primaryjoin=HierarchyTable.c.parentid==HierarchyTable.c.id, remote_side=[HierarchyTable.c.id], uselist=False, ), 'tools' : relation( HierarchyNode, primaryjoin=AMH_View.c.idhierarchy==HierarchyTable.c.id, foreign_keys=[AMH_View.c.idhierarchy], uselist=True, ), } ) The 'children' and 'parent' properties work like a charm however when accessing 'tools' the generated query is slow because it generates something like: select .... from hierarchy, arbeitsmittelhierarchy_arbeitsmittel_view where arbeitsmittelhierarchy_arbeitsmittel_view = some_id Because both tables are big the query takes forever. Using a LEFT JOIN would definitely be faster. Is there a way to configure the 'tools' property in a smarter way? Andreas
pgpj2HJErEYRa.pgp
Description: PGP signature