def test_expunge_cascade(self): mapper(Address, addresses) mapper(User, users, properties={ 'addresses':relation(Address, backref=backref("user", cascade="all"), cascade="all")}) _fixtures.run_inserts_for(users) _fixtures.run_inserts_for(addresses) session = create_session() u = session.query(User).filter_by(id=7).one() # get everything to load in both directions print [a.user for a in u.addresses]
def test_autoflush_rollback(self): mapper(Address, addresses) mapper(User, users, properties={ 'addresses':relation(Address)}) _fixtures.run_inserts_for(users) _fixtures.run_inserts_for(addresses) sess = create_session(autocommit=False, autoflush=True) u = sess.query(User).get(8) newad = Address(email_address='a new address') u.addresses.append(newad) u.name = 'some new name' assert u.name == 'some new name' assert len(u.addresses) == 4 assert newad in u.addresses sess.rollback() assert u.name == 'ed' assert len(u.addresses) == 3 assert newad not in u.addresses # pending objects dont get expired assert newad.email_address == 'a new address'
def test_expunge_cascade(self): mapper(Address, addresses) mapper(User, users, properties={ 'addresses':relation(Address, backref=backref("user", cascade="all"), cascade="all")}) _fixtures.run_inserts_for(users) _fixtures.run_inserts_for(addresses) session = create_session() u = session.query(User).filter_by(id=7).one() # get everything to load in both directions print [a.user for a in u.addresses] # then see if expunge fails session.expunge(u) assert sa.orm.object_session(u) is None assert sa.orm.attributes.instance_state(u).session_id is None for a in u.addresses: assert sa.orm.object_session(a) is None assert sa.orm.attributes.instance_state(a).session_id is None