On Dec 7, 2007, at 5:21 AM, Martin Pengelly-Phillips wrote:
>
> Hello again Michael,
>
> Have read the documentation you referenced, but am still unsure how to
> now delete a Tag without generating the following error: (Note - using
> Postgres in production)
>
> (IntegrityError) update or delete on "tags" violates foreign key
> constraint "employeesTags_tag_id_fkey" on "employeesTags"
> DETAIL: Key (id)=(3) is still referenced from table "employeesTags".
> 'DELETE FROM tags WHERE tags.id = %(id)s' {'id': 3}
>
> Without the lazy='dynamic' it works fine (correctly deletes entries
> from employeesTags first).
>
> The delete operation I am performing is:
>
> session.begin()
> entry = session.query(Tag).filter_by(id=3).first()
> try:
> session.delete(entry)
> session.commit()
> except Exception, error:
> print error
> session.rollback()
> else:
> print 'Deleted successfully'
>
hey Martin -
I think this is actually a bug in sqlalchemy regarding the "dynamic"
relation; ive added ticket #895.
Ive recently enhanced regular relations to also not unnecessarily load
backrefs, that code is in trunk if youd like to try it, and i dont
think it has this particular issue.
Otherwise, for now, when you load the Tag, you have two (well, three)
choices: you can load the colleciton of Employees attached to the
Tag, and explicitly remove the tag from each employee; or, you can
implement "ON DELETE CASCADE" in your database on the foreign key in
question so that it automatically updates itself; finally, you can,
within the transaction, issue a "DELETE FROM employees_tags where
tag_id=3" before you call session.commit(), although this might
conflict with existing Employee records.
implementing ON DELETE CASCADE is definitely the most "legit" way to
go here since it lets the database do most of the work.
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---