Michael Bayer wrote:
>
> bojanb wrote:
>>
>> On Oct 29, 5:32 pm, "Michael Bayer" <mike...@zzzcomputing.com> wrote:
>>
>>> how would the UOW "honor" RESTRICT ?  if you tell it to delete a
>>> parent,
>>> and you didn't tell it to delete a child, and you have a non-nullable
>>> FK
>>> or RESTRICT, you'd expect it to....throw an error, right ?   isn't that
>>> what happens here ?
>>
>> Well I don't know if we understand each other. If I have a ForeignKey
>> defined with ondelete='RESTRICT', and I delete the parent, no errors
>> are thrown.
>>
>> This only becomes apperent when you have a foreign key that is NOT
>> defined as non-nullable. Even if you define it to be non-nullable, the
>> error thrown when you try to delete the parent is not "update or
>> delete on table <parent_table> violates foreign key constraint", but
>> "null value in column <child_column> violates not-null constraint".
>>
>> I've created a ticket (http://www.sqlalchemy.org/trac/ticket/1594)
>> with more details and a test case to make it clearer.
>
> thanks for this.

correcting myself, the feature is already present (and is documented):

mapper(Person, persons, properties={
    'country': relation(Country, backref=backref('persons',
passive_deletes='all'), passive_updates=True)})

    :param passive_deletes=False:
       Indicates loading behavior during delete operations.

       A value of True indicates that unloaded child items should not
       be loaded during a delete operation on the parent.  Normally,
       when a parent item is deleted, all child items are loaded so
       that they can either be marked as deleted, or have their
       foreign key to the parent set to NULL.  Marking this flag as
       True usually implies an ON DELETE <CASCADE|SET NULL> rule is in
       place which will handle updating/deleting child rows on the
       database side.

       Additionally, setting the flag to the string value 'all' will
       disable the "nulling out" of the child foreign keys, when there
       is no delete or delete-orphan cascade enabled.  This is
       typically used when a triggering or error raise scenario is in
       place on the database side.  Note that the foreign key
       attributes on in-session child objects will not be changed
       after a flush occurs so this is a very special use-case
       setting.



>
>
>
> >
>


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