from sqlalchemy import create_engine, inspect
from sqlalchemy import Column, BigInteger, String, Date, Integer
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
from dateutil.relativedelta import *
Base = declarative_base()
class SaTest(Base):
__tablename__ = 'sa_test'
id = Column(BigInteger, primary_key=True)
name = Column(String(50))
dob = Column(Date)
number_of_children = Column(Integer)
def __repr__(self):
engine = create_engine('mysql://mysqluser:mysqlpassword@servername/databasename')
Base.metadata.bind = engine
DBSession = sessionmaker(bind=engine)
session = DBSession()
"""
# run this the first time to create the data
jim = SaTest(name='Jim', dob=parse('1971-02-23'), number_of_children=3)
session.add(jim)
joe = SaTest(name='Joe', dob=parse('1968-06-09'), number_of_children=5)
session.add(joe)
session.commit()"""
jim = session.query(SaTest).filter_by(id=1).one()
jim.dob = jim.dob + relativedelta(days=+14)
jim.number_of_children = jim.number_of_children + 1
#joe = session.query(SaTest).filter_by(id=2).first() <---- if I uncomment this line, inspect doesn't display the changes in history
insp = inspect(jim)
for attr, attr_state in insp.attrs.items():
if attr_state.history.has_changes():
print('{}: {}'.format(attr, attr_state.value))
print('History: {}\n'.format(attr_state.history))