This seems to work, but I didn't find examples of this. Does this look correct (assuming there is no parent table in the database and all I really want is 2 'normal' mappers and a 3rd that performs a polymorphoric_union)?
========================================== artran_union = polymorphic_union({ 'artran': artrans_table, 'archive': artransarchive_table }, 'type', 'artran_union') artranbase_mapper = mapper(ArTranBase, artran_union, polymorphic_on=artran_union.c.type) # ---------------------------- ArTran --------------------------------------- # mapper(ArTran, artrans_table, inherits=artranbase_mapper, concrete=True, polymorphic_identity='artran', properties={'trancode': relation(TranCode, cascade='refresh-expire,expunge', lazy=False), 'paymenttype': relation(PaymentType, cascade='refresh-expire,expunge', lazy=False)} ) # ---------------------------- ArTranArchive --------------------------------------- # mapper(ArTranArchive, artransarchive_table, inherits=artranbase_mapper, concrete=True, polymorphic_identity='archive', properties={'trancode': relation(TranCode, cascade='refresh-expire,expunge', lazy=False), 'paymenttype': relation(PaymentType, cascade='refresh-expire,expunge', lazy=False)} ) On Jul 29, 4:20 pm, Kent Bower <k...@retailarchitects.com> wrote: > No, in fact, there is no ArTranBase table at all. > > If I remove concrete inheritance, how do I issue a UNION of the two > tables and have the objects polymorphically loaded? > > On 7/29/2010 4:18 PM, Michael Bayer wrote: > > > On Jul 29, 2010, at 2:31 PM, Kent wrote: > > >> I'm getting a messy error that could be a bug, but is very likely > >> related to my setup of a set of 2 polymorphic classes I am attempting > >> to map. > > >> One entity is a "transaction" and the other is a "transaction_archive" > >> record. The table structure is therefore very similar for both tables > >> and it seems to fit Concrete Table Inheritance, except there is no > >> 'parent' entity. Rather, they are sister tables. > > >> What I have mostly works until I get into loading this union as a > >> relation to another table... then I'm having problems. > > >> I couldn't clearly see the "correct" way to set up this when there is > >> no real inheritance, but rather sister entities. > > >> Can you suggest how to correctly map these 2 tables? > > > it looks fine to me except you're asking for eager loading, and if you're > > querying from the ArTranBase you'd need to specify relationship() at that > > level (as well as on each child). Example > > athttp://www.sqlalchemy.org/docs/mappers.html#using-relationships-with-.... > > > OTOH if you are not querying from ArTranBase, remove the usage of concrete > > inheritance altogether. > > >> ================================================ > >> artran_union = polymorphic_union({ > >> 'artran': artrans_table, > >> 'archive': artransarchive_table > >> }, 'type', 'artran_union') > > >> artranbase_mapper = mapper(ArTranBase, artran_union, > >> with_polymorphic=('*', artran_union), > >> polymorphic_on=artran_union.c.type, > >> polymorphic_identity='ignored') > > >> # ---------------------------- ArTran > >> --------------------------------------- # > >> mapper(ArTran, artrans_table, inherits=artranbase_mapper, > >> concrete=True, polymorphic_identity='artran', > >> properties={'trancode': relation(TranCode, > >> cascade='refresh-expire,expunge', lazy=False), > >> 'paymenttype': relation(PaymentType, > >> cascade='refresh-expire,expunge', lazy=False)} > >> ) > > >> # ---------------------------- ArTranArchive > >> --------------------------------------- # > >> mapper(ArTranArchive, artransarchive_table, > >> inherits=artranbase_mapper, > >> concrete=True, polymorphic_identity='archive', > >> properties={'trancode': relation(TranCode, > >> cascade='refresh-expire,expunge', lazy=False), > >> 'paymenttype': relation(PaymentType, > >> cascade='refresh-expire,expunge', lazy=False)} > >> ) > > >> Thanks in advance. > > >> -- > >> You received this message because you are subscribed to the Google Groups > >> "sqlalchemy" group. > >> To post to this group, send email to sqlalch...@googlegroups.com. > >> To unsubscribe from this group, send email to > >> sqlalchemy+unsubscr...@googlegroups.com. > >> For more options, visit this group > >> athttp://groups.google.com/group/sqlalchemy?hl=en. > > -- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To post to this group, send email to sqlalch...@googlegroups.com. To unsubscribe from this group, send email to sqlalchemy+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/sqlalchemy?hl=en.