Hi,
I have a set up class inheritance using joined table inheritance. I'm using
sqlalchemy 0.8.2.
The Parent class has a DateTime attribute "updated_at", with
onupdate=datetime.utcnow.
If I update only one of the Child's attributes, only "child" table is
updated, parent.updated_at is not changed. If I change one of the Parent's
attributes, then updated_at is updated as expected.
Here's my questions:
1) Am I missing something in my setup? is it normal or is it a bug?
2) If this is normal, what is the right way to tell session that
"parent.updated_at" should be modified too?
Regards,
--
Bertrand
--
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/groups/opt_out.
# coding=utf-8
"""
"""
from __future__ import absolute_import
from datetime import datetime
import sqlalchemy as sa
from sqlalchemy import Column, Integer, String, ForeignKey
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
BaseMeta = Base.__class__
class Parent(Base):
__tablename__ = 'entity'
__mapper_args__ = {'polymorphic_on': 'entity_type',
'with_polymorphic': '*',
}
entity_type = Column('entity_type', String(1000), nullable=True)
id = Column('id', Integer(), primary_key=True)
name = Column('name', String(1000), default=u'')
updated_at = Column(sa.DateTime,
default=datetime.utcnow,
onupdate=datetime.utcnow)
class Child(Parent):
__tablename__ = 'child'
__mapper_args__ = {'polymorphic_identity': 'Child'}
id = Column(Integer,
ForeignKey('entity.id', name='fk_inherited_entity_id'),
primary_key=True)
text = Column('text', String(1000), default=u'')
def run():
engine = sa.create_engine('sqlite:///:memory:', echo=True)
Session = sa.orm.sessionmaker(bind=engine)
session = Session()
sa.orm.configure_mappers()
Base.metadata.create_all(engine)
obj = Child()
session.add(obj)
session.commit()
# obj.update_at is not changed
obj.text = 'some text'
session.commit()
# obj.name is changed, obj.updated_at is changed
obj.name = u'test'
obj.text = 'some text'
session.commit()
if __name__ == '__main__':
run()