Hi, I have a self-referential mapper that looks like that. Basicially a tree of 'HierarchyNode' where the leafs are 'ArbeitsmittelHierarchyNode' (accessed through the '_tools' property)
mapper(HierarchyNode, HierarchyTable, properties={ '_children' : relation( HierarchyNode,primaryjoin=and_(HierarchyTable.c.parentid==HierarchyTable.c.id, HierarchyTable.c.deleted==False),
order_by=[HierarchyTable.c.pos], cascade="all",backref=backref("parent", remote_side=[HierarchyTable.c.id])
), '_children_shared' : relation( HierarchyNode, primaryjoin=and_(HierarchyTable.c.id==HierarchyTable.c.idhierarchy_share), remote_side=[HierarchyTable.c.id], order_by=[HierarchyTable.c.pos], cascade="all", uselist=True,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, ), # internal property, never use it directly '_tools' : relation( ArbeitsmittelHierarchyNode, primaryjoin=AMH_View.c.idhierarchy==HierarchyTable.c.id, foreign_keys=[AMH_View.c.idhierarchy], uselist=True,backref=backref('parent', remote_side=[HierarchyTable.c.id]),
), } I am using the following code to iterate over an example tree for h in tree._children: tools = h._tools print '-->',h, h.id, tools--> <toolbox.database.model.HierarchyNode object at 0xb75dcaec> 3 [<toolbox.database.model.ArbeitsmittelHierarchyNode object at 0xb75dc40c>, <toolbox.database.model.ArbeitsmittelHierarchyNode object at 0xb75ea04c>]
-> <toolbox.database.model.HierarchyNode object at 0xb75e048c> 10 [<toolbox.database.model.ArbeitsmittelHierarchyNode object at 0xb75dc40c>]
The output shows me that both HierarchyNode have a child ArbeitsmittelHierarchyNode at 0xb75dc40c - which is definitely wrong.
With enabled SQL debugging I see the following queries:2007-06-15 09:08:20,729 INFO sqlalchemy.engine.base.Engine.0x..b4 SELECT amhier_am_view.idautor AS amhier_am_view_idautor, amhier_am_view.idsachgebiet AS amhier_am_view_idsachgebiet, amhier_am_view.num_hre AS amhier_am_view_num_hre, amhier_am_view.bemerkung AS amhier_am_view_bemerkung, amhier_am_view.versionsnr AS amhier_am_view_versionsnr, amhier_am_view.idzielgruppe AS amhier_am_view_idzielgruppe, amhier_am_view. idfassung AS amhier_am_view_idfassung, amhier_am_view.dateiname AS amhier_am_view_dateiname, amhier_am_view.originalname AS amhier_am_view_originalname, amhier_am_view.rechnerstand AS amhier_am_view_rechnersta nd, amhier_am_view.id AS amhier_am_view_id, amhier_am_view.hidx_master AS amhier_am_view_hidx_master, amhier_am_view.stammdatenverwaltung_tauglich AS amhier_am_view_stammdatenverwaltung_tauglich, amhier_am_vie w.rechner_stand AS amhier_am_view_rechner_stand, amhier_am_view.rechner_version AS amhier_am_view_rechner_version, amhier_am_view.version AS amhier_am_view_version, amhier_am_view.generator_tauglich AS amhier_ am_view_generator_tauglich, amhier_am_view.aedat AS amhier_am_view_aedat, amhier_am_view.hidx AS amhier_am_view_hidx, amhier_am_view.honorarfrei AS amhier_am_view_honorarfrei, amhier_am_view.neudat AS amhier_a m_view_neudat, amhier_am_view.rechtefrei AS amhier_am_view_rechtefrei, amhier_am_view.status AS amhier_am_view_status, amhier_am_view.signatur AS amhier_am_view_signatur, amhier_am_view.faxabruf AS amhier_am_v iew_faxabruf, amhier_am_view.format AS amhier_am_view_format, amhier_am_view.idgattung AS amhier_am_view_idgattung, amhier_am_view.bezeichnung_custom AS amhier_am_view_bezeichnung_custom, amhier_am_view.stellv ertreter AS amhier_am_view_stellvertreter, amhier_am_view.seiten AS amhier_am_view_seiten, amhier_am_view.zodb_path AS amhier_am_view_zodb_path, amhier_am_view.markierung AS amhier_am_view_markierung, amhier_a m_view.umfang AS amhier_am_view_umfang, amhier_am_view.num_pdf AS amhier_am_view_num_pdf, amhier_am_view.chgdat AS amhier_am_view_chgdat, amhier_am_view.versionskommentar AS amhier_am_view_versionskommentar, a mhier_am_view.aedat_string AS amhier_am_view_aedat_string, amhier_am_view.idhierarchy AS amhier_am_view_idhierarchy, amhier_am_view.versionsize AS amhier_am_view_versionsize, amhier_am_view.sperrgrund AS amhie r_am_view_sperrgrund, amhier_am_view.summary AS amhier_am_view_summary, amhier_am_view.gesperrt_bis AS amhier_am_view_gesperrt_bis, amhier_am_view.pos AS amhier_am_view_pos, amhier_am_view.stand AS amhier_am_v iew_stand, amhier_am_view.bezeichnung AS amhier_am_view_bezeichnung, amhier_am_view.num_rtf AS amhier_am_view_num_rtf, amhier_am_view.formular_version AS amhier_am_view_formular_version, amhier_am_view.benutze
r AS amhier_am_view_benutzer FROM amhier_am_viewWHERE amhier_am_view.idhierarchy = %(lazy_1bca)s ORDER BY amhier_am_view.hidx 2007-06-15 09:08:20,729 INFO sqlalchemy.engine.base.Engine.0x..b4 {'lazy_1bca': 3}
andSELECT amhier_am_view.idautor AS amhier_am_view_idautor, amhier_am_view.idsachgebiet AS amhier_am_view_idsachgebiet, amhier_am_view.num_hre AS amhier_am_view_num_hre, amhier_am_view.bemerkung AS amhier_am_view_bemerkung, amhier_am_view.versionsnr AS amhier_am_view_versionsnr, amhier_am_view.idzielgruppe AS amhier_am_view_idzielgruppe, amhier_am_view. idfassung AS amhier_am_view_idfassung, amhier_am_view.dateiname AS amhier_am_view_dateiname, amhier_am_view.originalname AS amhier_am_view_originalname, amhier_am_view.rechnerstand AS amhier_am_view_rechnersta nd, amhier_am_view.id AS amhier_am_view_id, amhier_am_view.hidx_master AS amhier_am_view_hidx_master, amhier_am_view.stammdatenverwaltung_tauglich AS amhier_am_view_stammdatenverwaltung_tauglich, amhier_am_vie w.rechner_stand AS amhier_am_view_rechner_stand, amhier_am_view.rechner_version AS amhier_am_view_rechner_version, amhier_am_view.version AS amhier_am_view_version, amhier_am_view.generator_tauglich AS amhier_ am_view_generator_tauglich, amhier_am_view.aedat AS amhier_am_view_aedat, amhier_am_view.hidx AS amhier_am_view_hidx, amhier_am_view.honorarfrei AS amhier_am_view_honorarfrei, amhier_am_view.neudat AS amhier_a m_view_neudat, amhier_am_view.rechtefrei AS amhier_am_view_rechtefrei, amhier_am_view.status AS amhier_am_view_status, amhier_am_view.signatur AS amhier_am_view_signatur, amhier_am_view.faxabruf AS amhier_am_v iew_faxabruf, amhier_am_view.format AS amhier_am_view_format, amhier_am_view.idgattung AS amhier_am_view_idgattung, amhier_am_view.bezeichnung_custom AS amhier_am_view_bezeichnung_custom, amhier_am_view.stellv ertreter AS amhier_am_view_stellvertreter, amhier_am_view.seiten AS amhier_am_view_seiten, amhier_am_view.zodb_path AS amhier_am_view_zodb_path, amhier_am_view.markierung AS amhier_am_view_markierung, amhier_a m_view.umfang AS amhier_am_view_umfang, amhier_am_view.num_pdf AS amhier_am_view_num_pdf, amhier_am_view.chgdat AS amhier_am_view_chgdat, amhier_am_view.versionskommentar AS amhier_am_view_versionskommentar, a mhier_am_view.aedat_string AS amhier_am_view_aedat_string, amhier_am_view.idhierarchy AS amhier_am_view_idhierarchy, amhier_am_view.versionsize AS amhier_am_view_versionsize, amhier_am_view.sperrgrund AS amhie r_am_view_sperrgrund, amhier_am_view.summary AS amhier_am_view_summary, amhier_am_view.gesperrt_bis AS amhier_am_view_gesperrt_bis, amhier_am_view.pos AS amhier_am_view_pos, amhier_am_view.stand AS amhier_am_v iew_stand, amhier_am_view.bezeichnung AS amhier_am_view_bezeichnung, amhier_am_view.num_rtf AS amhier_am_view_num_rtf, amhier_am_view.formular_version AS amhier_am_view_formular_version, amhier_am_view.benutze
r AS amhier_am_view_benutzer FROM amhier_am_viewWHERE amhier_am_view.idhierarchy = %(lazy_1bca)s ORDER BY amhier_am_view.hidx 2007-06-15 09:08:20,820 INFO sqlalchemy.engine.base.Engine.0x..b4 {'lazy_1bca': 10}
which looks FINE.When I perform the same SQL statement (in abbreviated from on the console) I get this
hidx | idhierarchy ----------+------------- HI933407 | 3 HI435846 | 3 (2 rows)Toolbox2Test=# select hidx, idhierarchy from amhier_am_view where idhierarchy=10;
hidx | idhierarchy ----------+------------- HI435846 | 10 (1 row)So I would expect to get a different ArbeitsmittelHierarchy instance when idhierarchy=10 but SA
returns the instance from the previous query. Bug or feature? Andreas -- ZOPYX Ltd. & Co. KG - Charlottenstr. 37/1 - 72070 Tübingen - Germany Web: www.zopyx.com - Email: [EMAIL PROTECTED] - Phone +49 - 7071 - 793376 Registergericht: Amtsgericht Stuttgart, Handelsregister A 381535 Geschäftsführer/Gesellschafter: ZOPYX Limited, Birmingham, UK ------------------------------------------------------------------------ E-Publishing, Python, Zope & Plone development, Consulting
pgppPxXwBzpeq.pgp
Description: PGP signature