yes it does (sa4) but needs something like:
import sys
sys.setrecursionlimit(200)

it gets slower and slower while running until it breaks. 

On Friday 20 June 2008 21:41:18 Marin wrote:
> [sqlalchemy] Re: Problem:maximum recursion depth exceeded
> From:
> Marin <[EMAIL PROTECTED]>
>   To:
> sqlalchemy <sqlalchemy@googlegroups.com>
>   Date:
> 2008-06-20 21:41
>    
> I spent 4 hours to replicate the error correctly while minimizing
> the code. I can't find a way to attach a file so I will paste the
> code here:
>
> import sqlalchemy as sa
> from sqlalchemy import create_engine, MetaData, orm
> from sqlalchemy import Column, ForeignKey
> from sqlalchemy import Integer, String
> from sqlalchemy.orm import mapper
>
> class Object(object):
>     pass
>
> class Q(Object):
>     pass
>
> class A(Object):
>     pass
>
> class C(Object):
>     pass
>
> class WC(C):
>     pass
>
> engine = create_engine('sqlite:///:memory:', echo=True)
>
> sm = orm.sessionmaker(autoflush=True, transactional=True,
> bind=engine)
>
> SA_Session = orm.scoped_session(sm)
>
> SA_Metadata = MetaData()
>
> object_table =  sa.Table('Object',
>                           SA_Metadata,
>                           Column('ObjectID', Integer,
> primary_key=True),
>                           Column('Type', String(1),
> nullable=False))
>
> q_table = sa.Table('Q',
>                    SA_Metadata,
>                    Column('QID', Integer,
> ForeignKey('Object.ObjectID'),primary_key=True))
>
> c_table = sa.Table('C',
>                    SA_Metadata,
>                    Column('CID', Integer,
> ForeignKey('Object.ObjectID'),primary_key=True))
>
> wc_table = sa.Table('WC',
>                     SA_Metadata,
>                     Column('WCID', Integer, ForeignKey('C.CID'),
> primary_key=True))
>
> a_table = sa.Table('A',
>                    SA_Metadata,
>                    Column('AID', Integer,
> ForeignKey('Object.ObjectID'),primary_key=True),
>                    Column('QID', Integer, ForeignKey('Q.QID')),
>                    Column('CID', Integer, ForeignKey('C.CID')))
>
>
>
>
>
>
> mapper(Object, object_table, polymorphic_on=object_table.c.Type,
> polymorphic_identity='O')
> mapper(Q, q_table, inherits=Object, polymorphic_identity='Q')
>
> mapper(C, c_table, inherits=Object, polymorphic_identity='C')
> mapper(WC, wc_table, inherits=C, polymorphic_identity='W')
>
> mapper(A, a_table, inherits=Object, polymorphic_identity='A',
>        properties = {
>                      'Q' : orm.relation(Q,
>  
> primaryjoin=a_table.c.QID==q_table.c.QID,
>                                         backref='As'),
>                      'C' : orm.relation(C,
>  
> primaryjoin=a_table.c.CID==c_table.c.CID,
>                                         backref='A',
>                                         uselist=False)
>                      }
>        )
>
>
>
> SA_Metadata.create_all(engine)
>
> def generate_error():
>     q = Q()
>     for j in range(307): #at 306 the error does not pop out
> (depending on recursion depth)
>         a = A()
>         a.Q = q
>         a.C = WC()
>
>     SA_Session.save(q)
>     SA_Session.commit() #here the error pops out
>
> def dont_generate_error():
>     q = Q()
>     SA_Session.save(q)
>     for j in range(600):
>         a = A()
>         a.Q = q
>         a.C = WC()
>         SA_Session.commit()
>
> dont_generate_error()
>
> generate_error()
>
> I hope I'll hear from you if you replicate the error.
> 


--~--~---------~--~----~------------~-------~--~----~
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 [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to