Thanks for the recipe.I faced with an error. The model is now: ------------------------------------------------------------------------------ from history_meta import VersionedMeta
Base = declarative_base(metaclass=VersionedMeta) class User(Base): __tablename__ = 'users' id = sa.Column(sa.Integer, primary_key=True) name = sa.Column(sa.Unicode(12)) fullname = sa.Column(sa.Unicode(40)) password = sa.Column(sa.Unicode(20)) active = sa.Column(sa.Boolean()) type = sa.Column(sa.SmallInteger()) note = sa.Column(sa.Text()) date_created = sa.Column(sa.Date()) ------------------------------------------------------------------------------ Session = sessionmaker(bind=engine, autocommit=False, autoflush=True, expire_on_commit=False, extension=VersionedListener()) ------------------------------------------------------------------------------ When inserting a new user, the error occurs: sqlite3: <class 'sqlalchemy.exc.IntegrityError'> -=> ('(IntegrityError) users.version may not be NULL',) postgre: <class 'sqlalchemy.exc.IntegrityError'> -=> ('(IntegrityError) null value in column "version" violates not-null constraint\n',) The code in history_meta creates the column version with default value 1: cls.version = Column('version', Integer, default=1, nullable=False) What is the reason? Thanks. Suha On Wed, Mar 25, 2009 at 17:17, Michael Bayer <mike...@zzzcomputing.com>wrote: > > I've placed a recipe for this on the wiki at > http://www.sqlalchemy.org/trac/wiki/UsageRecipes/LogVersions > . > > > On Mar 25, 2009, at 10:12 AM, Suha Onay wrote: > > > > > Hi, > > > > I am using sqlalchemy for a while in a project. > > The project has lots of models like User: > > > ------------------------------------------------------------------------------ > > from mcmodel import MCModel > > > > Base = declarative_base() > > > > class User(MCModel, Base): > > __tablename__ = 'users' > > > > id = sa.Column(sa.Integer, primary_key=True) > > name = sa.Column(sa.Unicode(12)) > > fullname = sa.Column(sa.Unicode(40)) > > password = sa.Column(sa.Unicode(20)) > > active = sa.Column(sa.Boolean()) > > type = sa.Column(sa.SmallInteger()) > > note = sa.Column(sa.Text()) > > date_created = sa.Column(sa.Date()) > > > ------------------------------------------------------------------------------ > > All of these models inherit from MCModel (nothing doing special). > > > > I want to save all the changes done to a user in a seperate db table > > like "_hist_users". > > The new inserts do not need to be in the hist table. > > When a user is updated, the old data of the user will be copied to the > > hist table with a column declaring this is an update operation. > > When a user is deleted, the old data of the user will be moved to the > > hist table with a column declaring this is a delete operation. > > With these operations, it is possible to know who modified what and > > when. > > > > How can i achieve in this? > > By modifying the MCModel to enable all the models aware of history > > backup? > > Or using class sqlalchemy.orm.interfaces.MapperExtension.after_update > > methods? (i do not know how) > > Or anything else? > > > > Thanks in advance. > > > > Suha > > > > > > > > > > > > > > > > > > > > --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---