from sqlalchemy import *
from sqlalchemy.orm import *

engine = create_engine("sqlite://", echo=True)

meta = MetaData(engine)
Session = scoped_session(sessionmaker(autoflush=False, transactional=False))
Session.configure(bind=engine)

mapper = Session.mapper

user_table = Table('users', meta,
    Column('id', Integer, primary_key=True),
    Column('email', Unicode(40), unique=True, nullable=False),
    Column('name', Unicode(20)),
)

class User(object):
    pass

mapper(User, user_table)

user = User()
user.email = "www@www.com"
user.name = "Mr Foo"

meta.create_all()

Session.flush()

Session.close()

def deco(text):
    return "\n%s %s %s" % ("#" * 10, text, "#" * 10)

print deco("quering user")
user = User.query.filter_by(email="www@www.com").one()

print deco("this session is not dirty, which is normal")
print Session.dirty

print deco("setting: user.email = 'www@www.com'")
user.email = "www@www.com"
#user.email = "www@www.com".upper()

print deco("should be empty as well as the email is the same, but it's not !!")
print Session.dirty

print deco("now let's flush, nothing should get UPDATE'd")
Session.flush()
