def second_flow(print_function): session = create_session() print_function("Reading account 1...") account = session.query(Account).filter(Account.name == "account1").one() print_function("Account 1 was read") print_function("Updating account 1...") account.amount += Decimal('100') print_function("Committing...") session.commit() print_function("Committed!")
def second_flow(print_function): transaction_level = "READ COMMITTED" print_function( f"Using '{transaction_level}'. We should NOT see uncommitted data...") session = create_session(transaction_level) account_count = session.query(Account).count() print_function(f"Account count: {account_count}") if account_count == 3: print_function('Sending email to CEO to say that we got 3 accounts!!!')
def first_flow(print_function): session = create_session("SERIALIZABLE") print_function("Reading account 1...") account = session.query(Account).filter(Account.name == "account1").one() print_function("Account 1 was read") print_function('Sleeping...') sleep(3) print_function('Waking up...') account.amount += Decimal('100') session.commit()
def first_flow(print_function): session = create_session() print_function('Adding account 3...') account3 = Account(name='account3', amount=Decimal('33.33')) session.add(account3) print_function('Flushing changes to the DB...') session.flush() print_function('Sleeping...') sleep(5) print_function('Waking up...') print_function('We didn\'t commit anything...')
def first_flow(print_function): session = create_session() print_function('Adding account 3...') account3 = Account(name='account3', amount=Decimal('33.33')) session.add(account3) print_function('Flushing changes to the DB...') session.flush() print_function('Sleeping...') sleep(5) print_function('Waking up...') print_function('Rolling back...') session.rollback() print_function('Rolled back!!')
def first_flow(print_function): transaction_level = "REPEATABLE READ" session = create_session(transaction_level) print_function(f"Using '{transaction_level}'. When we read the data first time ") print_function("we will create a fixed snapshot of the database") print_database(print_function, session) print_function('Sleeping...') sleep(5) print_function('Waking up...') print_function("The data in the DB has changed. But if we query it again ") print_function("we wont see any updates as we will be reading from the transaction snapshot") print_database(print_function, session)
def first_flow(print_function): session = create_session() print_function("Reading account 1...") account = session.query(Account).filter( Account.name == "account1").with_for_update().one() print_function("Account 1 was read") print_function("Updating account 1...") account.amount += Decimal('100') print_function('Sleeping...') sleep(5) print_function('Waking up...') print_function("Committing...") session.commit() print_function("Committed!")
def second_flow(print_function): transaction_level = "READ UNCOMMITTED" print_function( f"Using '{transaction_level}'. We should not be surprised to see uncommitted data..." ) session = create_session(transaction_level) account_3 = session.query(Account).filter( Account.name == 'account3').one_or_none() if account_3: print_function( "Updating the newly created account that is not committed yet...") account_3.amount += 50 print_function('Committing...') session.commit() print_function('Committed!!')
def second_flow(print_function): session = create_session() print_function('Adding new account at the meantime...') account3 = Account(name='account3', amount=Decimal('33.33')) session.add(account3) account1 = session.query(Account).filter(Account.name == 'account1').one_or_none() account2 = session.query(Account).filter(Account.name == 'account2').one_or_none() if account1: print_function('Updating existing account at the meantime...') account1.name = 'Updated from second flow' session.commit() if account2: print_function('Deleting existing account at the meantime...') session.delete(account2) session.commit() print_function('Committed!!')