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.