

import sqlalchemy
from sqlalchemy import * 
from sqlalchemy.ext.assignmapper import assign_mapper
from sqlalchemy.ext.sessioncontext import SessionContext
def eq_(a,b): 
    assert a==b, "%s != %s" % (a,b)

meta = DynamicMetaData()

offers = Table("offers", meta,
    Column("id", INT, primary_key=True),
    Column("name", String ),
)
class Offer(object):
    pass

def db_roundtrip(dsn):
    conn = meta.connect(dsn)
    meta.engine.echo = 1
    
    context = SessionContext(
        lambda: sqlalchemy.create_session(bind_to=meta.engine))
    assign_mapper(context, Offer, offers)
    session = context.current
    
    meta.create_all()
    session.flush()
    
    offer = Offer()
    offer.name = 'foobar'
    session.save(offer)
    session.flush()
    
    rows = Offer.select()
    eq_(len(rows), 1)
    eq_(rows[0].id, 1)
    eq_(rows[0].name, 'foobar')
    
    session.delete(offer)
    session.flush()
    
    rows = Offer.select()
    eq_(len(rows), 0)
    
    meta.drop_all()
    session.flush()
    
    sqlalchemy.orm.clear_mappers()

if __name__ == '__main__':
        
    db_roundtrip('sqlite:///:memory:')
    # pretend this is another connection :
    db_roundtrip('sqlite:///:memory:')
    
    print 'OK'