Created
January 26, 2010 00:05
-
-
Save batok/286403 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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