Hi.

I still do not fully understand cascade rules, however I want to be sure 
the behaviour below is a feature and not a bug.

Here is the code:

from sqlalchemy import *


db = create_engine('postgres://manlio:[EMAIL PROTECTED]/test', echo=False)


metadata = BoundMetaData(db)
a = Table(
     'a', metadata,
     Column('id', Integer, primary_key=True),
     Column('x', String)
     )

b = Table(
     'b', metadata,
     Column('uid', String, primary_key=True),
     Column('id', Integer, ForeignKey(a.c.id)),
     Column('y', String)
     )


class A(object):
     def __init__(self,  x):
         self.x = x

class B(object):
     def __init__(self, id, y):
         self.id = id
         self.y = y

aMapper = mapper(A, a)

bMapper = mapper(
     B, b,
     properties={
         'a': relation(
             A, lazy=False, cascade='all, delete-orphan'
             )
         }
     )


try:
     metadata.create_all()

     conn = db.connect()
     trans = conn.begin()
     sess = create_session(bind_to=conn)

     obj = A('x')
     sess.save(obj)

     sess.flush()
     sess.close()
     trans.commit()
     conn.close()
finally:
     metadata.drop_all()



When executing this script I obtain:

Traceback (most recent call last):
   File "cascade.py", line 52, in ?
     sess.flush()
   File "/usr/lib/python2.4/site-packages/sqlalchemy/orm/session.py", 
line 220, in flush
     self.uow.flush(self, objects)
   File "/usr/lib/python2.4/site-packages/sqlalchemy/orm/unitofwork.py", 
line 175, in flush
     if object_mapper(obj)._is_orphan(obj):
   File "/usr/lib/python2.4/site-packages/sqlalchemy/orm/mapper.py", 
line 232, in _is_orphan
     raise exceptions.FlushError("instance %s is an unsaved, pending 
instance and is an orphan (is not attached to %s)" %
sqlalchemy.exceptions.FlushError: instance <__main__.A object at 
0xb79d946c> is an unsaved, pending instance and is an orphan (is not 
attached to any parent 'B' instance via that classes' 'a' attribute)
[EMAIL PROTECTED]:~/projects/bugs/sqlalchemy$ python cascade.py
Traceback (most recent call last):
   File "cascade.py", line 52, in ?
     sess.flush()
   File "/usr/lib/python2.4/site-packages/sqlalchemy/orm/session.py", 
line 220, in flush
     self.uow.flush(self, objects)
   File "/usr/lib/python2.4/site-packages/sqlalchemy/orm/unitofwork.py", 
line 175, in flush
     if object_mapper(obj)._is_orphan(obj):
   File "/usr/lib/python2.4/site-packages/sqlalchemy/orm/mapper.py", 
line 232, in _is_orphan
     raise exceptions.FlushError("instance %s is an unsaved, pending 
instance and is an orphan (is not attached to %s)" %
sqlalchemy.exceptions.FlushError: instance <__main__.A object at 
0xb79a146c> is an unsaved, pending instance and is an orphan (is not 
attached to any parent 'B' instance via that classes' 'a' attribute)



Thanks and regards  Manlio Perillo

--~--~---------~--~----~------------~-------~--~----~
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