⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 session.py

📁 SQLAlchemy. 经典的Python ORM框架。学习必看。
💻 PY
📖 第 1 页 / 共 3 页
字号:
        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 + -