Hi, We have a parent class/table (Notification/notifications) and a child class/table(BusinessNotification/business_notifications). Both of them have a version_id_col defined. We are facing ConcurrentModificationException errors for the model at the end of the mail. The problem is because the update state generated uses 'None' a the value for notifications.version column.
We tried removing the version_id_col mapper arg in the child class - BusinessNotification and then the error went away and the update statement used the correct version column value to update. So, firstly we are wondering how do we fix the situation that we can have a version_id_col in the child class/table as well? Upon further investigations, we noticed that in the other parts of the application we used the following approach. parent_table = Table( ... ) class Parent(DeclarativeBase): __table__ = parent_table __mapper_args__ = {'polymorphic_on': parent_table.c.type, 'version_id_col': parent_table.c.version} child1_table = Table( ... ) class Child1(DeclarativeBase) __table__ = child1_table __mapper_args__ = {'polymorphic_identity':'c1', 'version_id_col':child1_table.c.version_num} With the above style of coding our models, we don't get ConcurrentModificationException, but any update statement to the parent_table does not use version column. Please throw some light on these behaviors. Regards, Naresh P.S. The model and sample client code follows. ------------------ class Notification(DeclarativeBase): """This entity represents the notifications saved for sending later """ __tablename__ = 'notifications' __table_args__ = {"mysql_engine":"InnoDB", "mysql_row_format":"DYNAMIC", "mysql_charset":"utf8"} id = Column(bigint, primary_key=True, autoincrement=False) entid = Column(bigint, ForeignKey('enterprises.entid', name='fk_notifn_entid'), nullable=False) notification_type = Column(types.String(30), nullable=False) source = Column(types.String(30), nullable=False) data = Column(text_type, nullable=False) status = Column(types.String(12), nullable=False, default='new') created_on = Column(types.DATETIME, nullable=False, default=func.current_timestamp()) last_updated = Column(types.DATETIME, nullable=True, onupdate=func.current_timestamp()) version = Column(types.SMALLINT, nullable=False, default=0) __mapper_args__ = {'polymorphic_on': notification_type, 'polymorphic_identity':'incident', 'version_id_col': version} class BusinessNotification(Notification): """This entity represents the business notifications """ __tablename__ = 'business_notifications' __table_args__ = {"mysql_engine":"InnoDB", "mysql_row_format":"DYNAMIC", "mysql_charset":"utf8"} notification_id = Column(bigint, ForeignKey('notifications.id', name='fk_bn_notificationid'), primary_key=True, autoincrement=False) event_id = Column(bigint, ForeignKey('doc_events.id', name='fk_bn_eventid'), nullable=True) created_on = Column(types.DATETIME, nullable=False, default=func.current_timestamp()) last_updated = Column(types.DATETIME, nullable=True, onupdate=func.current_timestamp()) version_num = Column(types.SMALLINT, nullable=False, default=0) __mapper_args__ = {'polymorphic_identity':'event', 'version_id_col': version_num} # __mapper_args__ = {'polymorphic_identity':'event'} if __name__ == '__main__': try : qry = meta.Session().query(BusinessNotification).filter(and_( BusinessNotification.status=='new', BusinessNotification.created_on < now())) qry = qry.order_by(BusinessNotification.created_on) all_notifications = qry.all() for notification in all_notifications : # some business logic to trigger status update notification.status='in_progress' meta.Session().commit() except Exception as ex : log.error("Error Identifying Notification Recipients") log.exception(ex) meta.Session().rollback() finally : meta.Session.remove() -- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To post to this group, send email to sqlalch...@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.