On 4/28/15 6:57 PM, [email protected] wrote:
Hi,
Background information: I am trying to implement functionality similar
to the history_meta.py example
(http://docs.sqlalchemy.org/en/rel_0_9/_modules/examples/versioned_history/history_meta.html).
I am listening for after_flush events and create an audit record and
am having problems with association objects. Here is an example:
class User(Auditable, self.Base, ComparableEntity):
__tablename__ = 'usertable'
id = Column(Integer, primary_key=True)
name = Column(String)
keywords = association_proxy('assocs', 'keyword')
class Keyword(Auditable, self.Base, ComparableEntity):
__tablename__ = 'keywordtable'
id = Column(Integer, primary_key=True)
word = Column(String)
class UserKeyword(Auditable, self.Base, ComparableEntity):
__tablename__ = 'userkeywordtable'
user_id = Column(Integer, ForeignKey("usertable.id"),
primary_key=True)
keyword_id = Column(Integer, ForeignKey("keywordtable.id"),
primary_key=True)
user = relationship(User,
backref=backref("assocs",
cascade="all, delete-orphan"))
keyword = relationship(Keyword)
def __init__(self, keyword=None, user=None):
self.user = user
self.keyword = keyword
apple = Keyword(word='apple')
pear = Keyword(word='pear')
bob = User(name='bob')
bob.keywords = [apple, pear]
sess.add(bob)
sess.commit()
bob.keywords.remove(apple) <====== this is when my question is about
sess.commit()
When we remove the keyword, it marks the UserKeyword association
object is "dirty" instead of "deleted". Why is that? Since the row is
being removed, I would expect it to be marked as "deleted", so that I
could make an audit record indicating it was deleted.
does the row actually get deleted? the calculation of "orphan" isn't
done until flush time, because theoretically you could be associating
the UserKeyword to another User.
it doesn't look like the versioned rows recipe has support for this use
case right now. You could force the up-front delete using a "remove"
attribute event on that collection.
--
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.