Sorry for the delay. Yes, i want to reference Table22, the 'correct'
code is as follows, but obtains the same result. Don't understand
because not run when it corrects.. Is it not possible to link
TableExt22 with Table22 only?

Thanks for the quick answer!
Fernando

#-------------------------------------------------------------------------
from sqlalchemy import *
from sqlalchemy.orm import *


engine = create_engine('sqlite:///',echo = True)

metadata = MetaData()

table_1 =  \
Table(
    'table_1', metadata,
    Column('id', Integer, primary_key = True),
)

table_2 = \
Table(
    'table_2', metadata,
    Column('id', Integer, primary_key = True),
    Column('id2', Integer, primary_key = True),
    Column('type', Integer, nullable = False),
    ForeignKeyConstraint(['id'],['table_1.id'])
)

table_21 = \
Table(
    'table_21', metadata,
    Column('id', Integer, primary_key = True),
    Column('id2', Integer, primary_key = True),
    Column('info', String),
    ForeignKeyConstraint(['id'],['table_2.id']),
)

table_22 = \
Table(
    'table_22', metadata,
    Column('id', Integer, primary_key = True),
    Column('id2', Integer, primary_key = True),
    Column('ext', Integer, primary_key = True),
    Column('info', String),
    ForeignKeyConstraint(['id'],['table_2.id']),
    ForeignKeyConstraint(['ext'],['table_ex22.id'])
)

table_ex22 = \
Table(
    'table_ex22', metadata,
    Column('id', Integer, primary_key = True),
)

class Table1(object):
    pass

class Table2(object):
    pass

class Table21(Table2):
    pass

class Table22(Table2):
    pass

class TableEx22(object):
    pass

mapper(Table1, table_1,
       properties = {\
       't2': relation(Table2, backref = 't1', cascade = 'all, delete,
delete-orphan', passive_updates = False, passive_deletes = False),
       }
)
mapper(TableEx22, table_ex22,
       properties = {\
       't22': relation(Table22, backref = 'tex', cascade = 'all,
delete, delete-orphan', passive_updates =False, passive_deletes =
False),
       }
)
mapper(Table2, table_2, polymorphic_on=table_2.c.type,
polymorphic_identity=0)
mapper(Table21, table_21, inherits=Table2, polymorphic_identity=1)
mapper(Table22, table_22, inherits=Table2, polymorphic_identity=2)

Session = sessionmaker()
#------------------------------------------------------------------------------

#test:

metadata.bind = engine
metadata.create_all()

s = Session()

t = Table1()
t.id = 0

tex = TableEx22()
tex.id = 0

s.add(t)
s.add(tex)
s.commit()

t21 = Table21()
t21.id2 = 0
t21.t1 = t
s.add(t21)
s.commit()

t22 = Table22()
t22.id2 = 1
t22.t1 = t
t22.tex = tex
s.add(t22)
s.commit()

for i in tex.t22:
    print type(i)




On 18 mayo, 18:00, Michael Bayer <mike...@zzzcomputing.com> wrote:
> On May 18, 2009, at 8:51 AM, fleong wrote:
>
>
>
> > t = Table1()
> > t.id = 0
>
> > tex = TableEx22()
> > tex.id = 0
>
> > s.add(t)
> > s.add(tex)
> > s.commit()
>
> > t21 = Table21()
> > t21.id2 = 0
> > t21.t1 = t
> > s.add(t21)
> > s.commit()
>
> > t22 = Table22()
> > t22.id2 = 1
> > t22.t1 = t
> > t22.tex = tex
> > s.add(t22)
> > s.commit()
>
> > for i in tex.t22:
> >    print type(i)
>
> >>> [0]
> > <class '__main__.Table21'>
> > <class '__main__.Table22'>
>
> TableEx22.t22, despite the name, references the Table2 class.   You  
> probably want that to reference Table22.  the result is still strange,  
> but this whole program contains typos and doesn't even run when they  
> are corrected, so for further help you'd have to post the actual test  
> case.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To post to this group, send email to sqlalchemy@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
-~----------~----~----~----~------~----~------~--~---

Reply via email to