Code is below: see NOTE comments
from sqlalchemy import create_engine from sqlalchemy import Column, Integer, Unicode from sqlalchemy.orm import sessionmaker from sqlalchemy.ext.declarative import declarative_base from contextlib import contextmanager USERNAME = u'root' PASSWORD = u'' LOCAL_DB = u'localhost' DATABASE = u'test_db' engine = create_engine(u'mysql+mysqldb://{}:{}@{}/{}'.format( USERNAME, PASSWORD, LOCAL_DB, DATABASE), echo=True) get_session = sessionmaker(bind=engine) mysql = declarative_base(bind=engine) server_engine = create_engine(u'mysql+mysqldb://{}:{}@{}'.format( USERNAME, PASSWORD, LOCAL_DB)) get_server_session = sessionmaker(bind=server_engine) server_session = get_server_session() server_session.execute('CREATE DATABASE IF NOT EXISTS test_db') server_session.commit() server_session.close() @contextmanager def mysql_session(): try: session = get_session() yield session except Exception as e: session.rollback() # Release any potential locks raise e finally: session.rollback() session.close() class User(mysql): __tablename__ = u'user' id = Column(Integer, primary_key=True) first_name = Column(Unicode(64)) last_name = Column(Unicode(64)) session = get_session() mysql.metadata.drop_all() mysql.metadata.create_all() def add_last_name(user_id): with mysql_session() as s: user = s.query(User).filter(User.id == user_id).one() user.last_name = u'Litz' s.commit() with mysql_session() as s: new_user = User(first_name=u'Derek') s.add(new_user) s.commit() add_last_name(new_user.id) # NOTE this makes sense, the object was never updated here assert not new_user.last_name == u'Litz' # NOTE Why doesn't user receive the updated information? user = s.query(User).filter(User.id == new_user.id).one() assert not user.last_name == u'Litz' # NOTE Despite commit being the last thing I did for this session # this fixes the problem. Why didn't it before? s.commit() # or s.rollback() or s.close() user = s.query(User).filter(User.id == new_user.id).one() assert user.last_name == u'Litz' -- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To view this discussion on the web visit https://groups.google.com/d/msg/sqlalchemy/-/xvzKe6ceB9wJ. To post to this group, send email to sqlalchemy@googlegroups.com. To unsubscribe from this group, send email to sqlalchemy+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/sqlalchemy?hl=en.