On Feb 13, 2011, at 1:39 PM, Andrey Gladilin wrote: > I am trying to create a version column which would use values from a > single postgresql sequence. > > record_versions_id_seq = Sequence('record_versions_id_seq') > > class TimestampMixin(object): > created_at = Column(DateTime, default=func.now()) > record_version = Column(Integer, nullable=False, > default=func.nextval("record_versions_id_seq")) > > __mapper_args__ = { > 'version_id_col': record_version, > 'version_id_generator': lambda v: > func.nextval("record_versions_id_seq") > } > > class Team(Base, NameMixin, TimestampMixin): > __tablename__ = 'teams' > id = Column(Integer, primary_key=True) > > There are other tables like Team inheriting TimestampMixin. And here I > have two problems: > > 1. Decribed code does not work for update. I.e when I update the > record from Team, the record_version column value is not getting > changed. So to workaround this problem I have to explicitly specify > __mapper_args__ in Team class.
if Base or NameMixin is also modifying __mapper_args__, those will override what TimestampMixin returns. The __mapper_args__ from different mixins need to be combined manually for the final product. Some background at http://www.sqlalchemy.org/docs/orm/extensions/declarative.html#combining-table-mapper-arguments-from-multiple-mixins > 2. Code lambda v: func.nextval("record_versions_id_seq") does not > work. I guess this code is incorrect, so could you help me to create a > correct one please? you'd need to execute the function through a connection, and you can use the Sequence object directly: lambda v: some_engine.execute(record_versions_id_seq) -- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To post to this group, send email to sqlalchemy@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.