spacepaste

  1.  
  2. from sqlalchemy import create_engine, Column
  3. from sqlalchemy.types import Integer
  4. from sqlalchemy.orm import scoped_session, sessionmaker
  5. from sqlalchemy.ext.declarative import declarative_base
  6. from sqlalchemy.event import listens_for
  7. Base = declarative_base()
  8. Session = scoped_session(sessionmaker())
  9. class MyModel(Base):
  10. __tablename__ = "MyTable"
  11. priid = Column(Integer(), primary_key=True)
  12. secid = Column(Integer())
  13. @listens_for(MyModel, 'after_insert')
  14. def mymodel_after_insert(mapper, connection, target):
  15. mytable = MyModel.__table__
  16. priid = target.priid
  17. statement = (mytable.update()
  18. .where(mytable.c.priid == priid)
  19. .values(secid=priid))
  20. connection.execute(statement)
  21. if __name__ == '__main__':
  22. engine = create_engine('sqlite://', echo=True)
  23. Base.metadata.create_all(bind=engine)
  24. Session.configure(bind=engine)
  25. # Add 10 rows
  26. for i in xrange(10):
  27. Session.add(MyModel())
  28. Session.commit()
  29. Session.remove()
  30. # Check the rows
  31. rows = Session.query(MyModel).all()
  32. for row in rows:
  33. assert row.secid == row.priid
  34. print("Checked %s rows." % len(rows))
  35.