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
