On Jul 16, 2014, at 1:29 AM, Pavel Aborilov <[email protected]> wrote:

> Hi!
> I have two models
> 
> class DB_Object(Base):
>     __tablename__ = 'objects' 
>     id = Column(Integer, primary_key=True) 
>     name = Column(String(50), unique=True, nullable=False) 
>     type = Column(String(50), default="object") 
>     __mapper_args__ = { 'polymorphic_identity': 'object', 'polymorphic_on': 
> type }
> 
> class Contact(DB_Object): 
>     __tablename__ = 'contacts' 
>     id = Column(Integer, ForeignKey('objects.id'), primary_key=True) 
>     enable = Column(Boolean, default=False) 
>     normal_open = Column(Boolean, default=True) 
>     cr_enabled = Column(Boolean, default=False) 
>     __mapper_args__ = {'polymorphic_identity': 'contact'}
> 
> I need to delete group of contacts by id, but
> if I do
> 
> ids = (1,2,3)
> session.query(Contact).filter(Contact.id.in_(ids)).delete(synchronize_session="fetch")
> 
> it's remove only contacts and leave object in "objects" table.
> 
> If i remove like this:
> o = session.query(Contact).get(id)
> session.delete(o)
> 
> it remove objects from both tables.
> 
> How can I do this for group of id?

query.delete() emits a DELETE statement directly, and that's it.  if you want 
related rows in other tables to be deleted automatically, you'd set up ON 
DELETE CASCADE for those foreign keys (this is a DB thing, not SQLAlchemy): 
http://en.wikipedia.org/wiki/Foreign_key#CASCADE

when using session.delete(), the unit of work process acts as an optional 
substitute for the ON DELETE CASCADE feature by traversing through the 
relationship() objects you've set up for the object and finding related things 
to delete.  It is much less efficient but more automatic as the ORM / 
relationship() feature just does it.


-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

Reply via email to