hi James -

i think you can add "passive_deletes=True" to your various one_to_many 
() relationships; this will prevent SA from loading in the child  
items in order to delete them.  but also you need to tell SA that  
those relations are cascading deletes in the first place, by placing  
"cascade='all, delete'" on them also.  the 0.3 docs seem to be a  
little inaccurate in this regard.

the "ondelete='CASCADE'" call in ForeignKey is only important if you  
are using your Table objects to issue CREATE statements to the  
database.  that keyword currently does not affect anything within the  
ORM.

let me know if this helps,

- mike

On Aug 16, 2007, at 1:27 AM, James wrote:

>
> I just installed the latest 0.3 version of SA (0.3.10).
>
> How does one tell SqlAlchemy to cascade on delete within a TurboGears
> context?
>
> I use MySql with InnoDB and I have ondelete cascade working on the
> tables. So, if I delete an account directly via sql, the user records
> are correctly deleted.
>
> But with SA, deleting an account does not delete the user records.
>
> I saw in SA docs a rough description of how to do ondelete cascade
> using the passive_deletes=True arg in a mapper. But I'm not sure how
> it applies through the TG layer.
>
> I tried adding ondelete="CASCADE" to the ForeignKey constructor call
> in the account column (below) based on example here:
> http://www.sqlalchemy.org/docs/03/adv_datamapping.html
>
> This did not work. Child rows not deleted.
> Any help much appreciated!
> James
>
> INFO:
> I have accounts with one-to-many users in model.py:
>
> class User(ActiveMapper):
>     """
>     Reasonably basic User definition. Probably would want additional
> attributes.
>     """
>     class mapping:
>         __table__ = "tg_user"
>         user_id       = column(Integer, primary_key=True)
>         user_name     = column(Unicode(16), unique=True)
>         email_address = column(Unicode(255), unique=True)
>         display_name  = column(Unicode(255))
>         last_name     = column(Unicode(255))
>         first_name    = column(Unicode(255))
>         password      = column(Unicode(40))
>         created       = column(DateTime, default=datetime.now)
>         nonce         = column(Unicode(50))
>    account       = column(Integer,
> foreign_key=ForeignKey("account.id"))
>         primary       = column(Integer)
>
> class Account(ActiveMapper):
>     class mapping:
>         __table__ = "account"
>         id              = column(Integer, primary_key=True)
>         account_name    = column(Unicode(50), unique=True)
>         number          = column(Unicode(50), unique=True)
>         gateway_cust_num= column(Unicode(50))
>         created         = column(DateTime, default=datetime.now)
>         company         = column(Unicode(50))
>         address         = column(Unicode(50))
>         address2        = column(Unicode(50))
>         city            = column(Unicode(50))
>         state           = column(Unicode(20))
>         zip             = column(Unicode(20))
>         phone           = column(Unicode(20))
>         cc_last_4       = column(Unicode(10))
>     users           = one_to_many('User')
>         invoices        = one_to_many('Invoice')
>         plan_id         = column(Integer)
>
>
> >


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To post to this group, send email to [email protected]
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