Skip to content

Instantly share code, notes, and snippets.

@batok
Created January 26, 2010 00:05
Show Gist options
  • Save batok/286403 to your computer and use it in GitHub Desktop.
Save batok/286403 to your computer and use it in GitHub Desktop.
from sqlalchemy.ext.declarative import declarative_base
from history_meta import VersionedMeta, VersionedListener
from sqlalchemy import create_engine, Column, Integer, String, ForeignKey, DateTime
from sqlalchemy.orm import clear_mappers, compile_mappers, sessionmaker, deferred, MapperExtension
from sqlalchemy.sql.expression import text
from datetime import datetime
import time
engine = create_engine("postgresql+pg8000://postgres@localhost:25432/pruebas")
Base = declarative_base(metaclass=VersionedMeta, bind=engine)
Session = sessionmaker(extension=VersionedListener())
class UpdateExtension(MapperExtension):
def after_update(self, mapper, connection, instance):
testver_table = mapper.mapped_table
connection.execute( testver_table.update( testver_table.c.id == instance.id ).values( last_update = text("NOW()")))
class SomeTable(Base):
__tablename__ = "testver"
__mapper_args__ = { 'extension':UpdateExtension()}
id = Column( Integer, primary_key=True )
name = Column( String(50) )
created = Column( DateTime, server_default = text("NOW()") )
last_update = Column( DateTime, server_default = text("NOW()") )
def __init__(self, name = ""):
self.name = name
def __repr__(self):
return "<SomeTable( name = '%s') >" % self.name
if __name__ == "__main__":
Base.metadata.drop_all()
Base.metadata.create_all()
sess = Session()
t = SomeTable( name = 'Domingo')
sess.add(t)
sess.commit()
print t.version
t.name = 'Aguilera'
sess.commit()
print t.version
t.name = "Castillo"
print t.version
time.sleep(5) #some time here
sess.commit()
for n in "earth wind fire water".split():
t.name = n
sess.commit()
time.sleep(1)
print t.id, t.name , t.created, t.version
print "=" * 50
for row in engine.execute( "select id,version, name, last_update from testver_history union select id, version, name, last_update from testver order by id, version" ):
print row[0], row[1], row[2], row[3]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment