📄 session.py
字号:
self.assert_(s.prune() == 0) self.assert_(len(s.identity_map) == 0) s.flush() self.assert_(len(s.identity_map) == 1) self.assert_(s.prune() == 1) self.assert_(len(s.identity_map) == 0) u = s.query(User).get(user_id) s.delete(u) del u self.assert_(s.prune() == 0) self.assert_(len(s.identity_map) == 1) s.flush() self.assert_(s.prune() == 0) self.assert_(len(s.identity_map) == 0) def test_no_save_cascade(self): mapper(Address, addresses) mapper(User, users, properties=dict( addresses=relation(Address, cascade="none", backref="user") )) s = create_session() u = User() s.save(u) a = Address() u.addresses.append(a) assert u in s assert a not in s s.flush() print "\n".join([repr(x.__dict__) for x in s]) s.clear() assert s.query(User).one().user_id == u.user_id assert s.query(Address).first() is None clear_mappers() tables.delete() mapper(Address, addresses) mapper(User, users, properties=dict( addresses=relation(Address, cascade="all", backref=backref("user", cascade="none")) )) s = create_session() u = User() a = Address() a.user = u s.save(a) assert u not in s assert a in s s.flush() s.clear() assert s.query(Address).one().address_id == a.address_id assert s.query(User).first() is None def _assert_key(self, got, expect): assert got == expect, "expected %r got %r" % (expect, got) def test_identity_key_1(self): mapper(User, users) mapper(User, users, entity_name="en") s = create_session() key = s.identity_key(User, 1) self._assert_key(key, (User, (1,), None)) key = s.identity_key(User, 1, "en") self._assert_key(key, (User, (1,), "en")) key = s.identity_key(User, 1, entity_name="en") self._assert_key(key, (User, (1,), "en")) key = s.identity_key(User, ident=1, entity_name="en") self._assert_key(key, (User, (1,), "en")) def test_identity_key_2(self): mapper(User, users) s = create_session() u = User() s.save(u) s.flush() key = s.identity_key(instance=u) self._assert_key(key, (User, (u.user_id,), None)) def test_identity_key_3(self): mapper(User, users) mapper(User, users, entity_name="en") s = create_session() row = {users.c.user_id: 1, users.c.user_name: "Frank"} key = s.identity_key(User, row=row) self._assert_key(key, (User, (1,), None)) key = s.identity_key(User, row=row, entity_name="en") self._assert_key(key, (User, (1,), "en")) def test_extension(self): mapper(User, users) log = [] class MyExt(SessionExtension): def before_commit(self, session): log.append('before_commit') def after_commit(self, session): log.append('after_commit') def after_rollback(self, session): log.append('after_rollback') def before_flush(self, session, flush_context, objects): log.append('before_flush') def after_flush(self, session, flush_context): log.append('after_flush') def after_flush_postexec(self, session, flush_context): log.append('after_flush_postexec') sess = create_session(extension = MyExt()) u = User() sess.save(u) sess.flush() assert log == ['before_flush', 'after_flush', 'before_commit', 'after_commit', 'after_flush_postexec'] log = [] sess = create_session(transactional=True, extension=MyExt()) u = User() sess.save(u) sess.flush() assert log == ['before_flush', 'after_flush', 'after_flush_postexec'] log = [] u.user_name = 'ed' sess.commit() assert log == ['before_commit', 'before_flush', 'after_flush', 'after_flush_postexec', 'after_commit'] log = [] sess.commit() assert log == ['before_commit', 'after_commit'] def test_pickled_update(self): mapper(User, users) sess1 = create_session() sess2 = create_session() u1 = User() sess1.save(u1) try: sess2.save(u1) assert False except exceptions.InvalidRequestError, e: assert "already attached to session" in str(e) u2 = pickle.loads(pickle.dumps(u1)) sess2.save(u2) def test_duplicate_update(self): mapper(User, users) Session = sessionmaker() sess = Session() u1 = User() sess.save(u1) sess.flush() assert u1.user_id is not None sess.expunge(u1) assert u1 not in sess u2 = sess.query(User).get(u1.user_id) assert u2 is not None and u2 is not u1 assert u2 in sess self.assertRaises(Exception, lambda: sess.update(u1)) sess.expunge(u2) assert u2 not in sess u1.user_name = "John" u2.user_name = "Doe" sess.update(u1) assert u1 in sess sess.flush() sess.clear() u3 = sess.query(User).get(u1.user_id) assert u3 is not u1 and u3 is not u2 and u3.user_name == u1.user_name def test_no_double_save(self): sess = create_session() class Foo(object): def __init__(self): sess.save(self) class Bar(Foo): def __init__(self): sess.save(self) Foo.__init__(self) mapper(Foo, users) mapper(Bar, users) b = Bar() assert b in sess assert len(list(sess)) == 1class ScopedSessionTest(ORMTest): def define_tables(self, metadata): global table, table2 table = Table('sometable', metadata, Column('id', Integer, primary_key=True), Column('data', String(30))) table2 = Table('someothertable', metadata, Column('id', Integer, primary_key=True), Column('someid', None, ForeignKey('sometable.id')) ) def test_basic(self): Session = scoped_session(sessionmaker()) class SomeObject(fixtures.Base): query = Session.query_property() class SomeOtherObject(fixtures.Base): query = Session.query_property() mapper(SomeObject, table, properties={ 'options':relation(SomeOtherObject) }) mapper(SomeOtherObject, table2) s = SomeObject(id=1, data="hello") sso = SomeOtherObject() s.options.append(sso) Session.save(s) Session.commit() Session.remove() self.assertEquals(SomeObject(id=1, data="hello", options=[SomeOtherObject(someid=1)]), Session.query(SomeObject).one()) self.assertEquals(SomeObject(id=1, data="hello", options=[SomeOtherObject(someid=1)]), SomeObject.query.one()) self.assertEquals(SomeOtherObject(someid=1), SomeOtherObject.query.filter(SomeOtherObject.someid==sso.someid).one())class ScopedMapperTest(TestBase): def setUpAll(self): global metadata, table, table2 metadata = MetaData(testing.db) table = Table('sometable', metadata, Column('id', Integer, primary_key=True), Column('data', String(30))) table2 = Table('someothertable', metadata, Column('id', Integer, primary_key=True), Column('someid', None, ForeignKey('sometable.id')) ) metadata.create_all() def setUp(self): global SomeObject, SomeOtherObject class SomeObject(object):pass class SomeOtherObject(object):pass global Session Session = scoped_session(create_session) Session.mapper(SomeObject, table, properties={ 'options':relation(SomeOtherObject) }) Session.mapper(SomeOtherObject, table2) s = SomeObject() s.id = 1 s.data = 'hello' sso = SomeOtherObject() s.options.append(sso) Session.flush() Session.clear() def tearDownAll(self): metadata.drop_all() def tearDown(self): for table in metadata.table_iterator(reverse=True): table.delete().execute() clear_mappers() def test_query(self): sso = SomeOtherObject.query().first() assert SomeObject.query.filter_by(id=1).one().options[0].id == sso.id def test_query_compiles(self): class Foo(object): pass Session.mapper(Foo, table2) assert hasattr(Foo, 'query') ext = MapperExtension() class Bar(object): pass Session.mapper(Bar, table2, extension=[ext]) assert hasattr(Bar, 'query') class Baz(object): pass Session.mapper(Baz, table2, extension=ext) assert hasattr(Baz, 'query') def test_validating_constructor(self): s2 = SomeObject(someid=12) s3 = SomeOtherObject(someid=123, bogus=345) class ValidatedOtherObject(object):pass Session.mapper(ValidatedOtherObject, table2, validate=True) v1 = ValidatedOtherObject(someid=12) try: v2 = ValidatedOtherObject(someid=12, bogus=345) assert False except exceptions.ArgumentError: pass def test_dont_clobber_methods(self): class MyClass(object): def expunge(self): return "an expunge !" Session.mapper(MyClass, table2) assert MyClass().expunge() == "an expunge !"class ScopedMapperTest2(ORMTest): def define_tables(self, metadata): global table, table2 table = Table('sometable', metadata, Column('id', Integer, primary_key=True), Column('data', String(30)), Column('type', String(30)) ) table2 = Table('someothertable', metadata, Column('id', Integer, primary_key=True), Column('someid', None, ForeignKey('sometable.id')), Column('somedata', String(30)), ) def test_inheritance(self): def expunge_list(l): for x in l: Session.expunge(x) return l class BaseClass(fixtures.Base): pass class SubClass(BaseClass): pass Session = scoped_session(sessionmaker()) Session.mapper(BaseClass, table, polymorphic_identity='base', polymorphic_on=table.c.type) Session.mapper(SubClass, table2, polymorphic_identity='sub', inherits=BaseClass) b = BaseClass(data='b1') s = SubClass(data='s1', somedata='somedata') Session.commit() Session.clear() assert expunge_list([BaseClass(data='b1'), SubClass(data='s1', somedata='somedata')]) == BaseClass.query.all() assert expunge_list([SubClass(data='s1', somedata='somedata')]) == SubClass.query.all()if __name__ == "__main__": testenv.main()
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -