from sqlalchemy import *
from sqlalchemy.orm import *

engine = create_engine('sqlite:///:memory:')
metadata = MetaData()
metadata.bind = engine

tablea = Table('a', metadata,
      Column('id',              INT, primary_key=True, nullable=False),
      Column('nm',              VARCHAR(20), nullable=False)
)

tableb = Table('b', metadata,
      Column('id',              INT, primary_key=True, nullable=False),
      Column('ida',             ForeignKey('a.id')),
      Column('nm',              VARCHAR(20), nullable=False)
)

metadata.create_all(engine)

class kwi(object):
    def __init__(self, **kw):
        for k,v in kw.items():
            setattr(self, k, v)

class A(kwi):
    pass

class B(kwi):
    pass

mA = mapper(A, tablea,
       properties = {'hist':  dynamic_loader(B, cascade="all", backref='parent')}
)
mB = mapper(B, tableb)


S = sessionmaker()()

for n in range(5):
    a = A(nm='test-%d' % n)
    S.add(a)
    for h in range(5):
        a.hist.append(B(nm='hist-%d' % h))
S.flush()

S.clear()
a = S.query(A).get(2)
S.expire(a)




