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

📄 basic.py

📁 SQLAlchemy. 经典的Python ORM框架。学习必看。
💻 PY
📖 第 1 页 / 共 2 页
字号:
            Column('description', String(32))        )        user_roles = Table('user_role', metadata,            Column('user_id', Integer, ForeignKey('users.id'), primary_key=True),            Column('role_id', Integer, ForeignKey('role.id'), primary_key=True)        )        admins = Table('admin', metadata,            Column('admin_id', Integer, primary_key=True),            Column('user_id', Integer, ForeignKey('users.id'))        )    def testone(self):        class User(object):pass        class Role(object):pass        class Admin(User):pass        role_mapper = mapper(Role, roles)        user_mapper = mapper(User, users, properties = {                'roles' : relation(Role, secondary=user_roles, lazy=False, private=False)            }        )        admin_mapper = mapper(Admin, admins, inherits=user_mapper)        sess = create_session()        adminrole = Role()        sess.save(adminrole)        sess.flush()        # create an Admin, and append a Role.  the dependency processors        # corresponding to the "roles" attribute for the Admin mapper and the User mapper        # have to ensure that two dependency processors dont fire off and insert the        # many to many row twice.        a = Admin()        a.roles.append(adminrole)        a.password = 'admin'        sess.save(a)        sess.flush()        assert user_roles.count().scalar() == 1    def testtwo(self):        class User(object):            def __init__(self, email=None, password=None):                self.email = email                self.password = password        class Role(object):            def __init__(self, description=None):                self.description = description        class Admin(User):pass        role_mapper = mapper(Role, roles)        user_mapper = mapper(User, users, properties = {                'roles' : relation(Role, secondary=user_roles, lazy=False, private=False)            }        )        admin_mapper = mapper(Admin, admins, inherits=user_mapper)        # create roles        adminrole = Role('admin')        sess = create_session()        sess.save(adminrole)        sess.flush()        # create admin user        a = Admin(email='tim', password='admin')        a.roles.append(adminrole)        sess.save(a)        sess.flush()        a.password = 'sadmin'        sess.flush()        assert user_roles.count().scalar() == 1class VersioningTest(ORMTest):    def define_tables(self, metadata):        global base, subtable, stuff        base = Table('base', metadata,            Column('id', Integer, Sequence('version_test_seq', optional=True), primary_key=True ),            Column('version_id', Integer, nullable=False),            Column('value', String(40)),            Column('discriminator', Integer, nullable=False)        )        subtable = Table('subtable', metadata,            Column('id', None, ForeignKey('base.id'), primary_key=True),            Column('subdata', String(50))            )        stuff = Table('stuff', metadata,            Column('id', Integer, primary_key=True),            Column('parent', Integer, ForeignKey('base.id'))            )    @engines.close_open_connections    def test_save_update(self):        class Base(fixtures.Base):            pass        class Sub(Base):            pass        class Stuff(Base):            pass        mapper(Stuff, stuff)        mapper(Base, base, polymorphic_on=base.c.discriminator, version_id_col=base.c.version_id, polymorphic_identity=1, properties={            'stuff':relation(Stuff)        })        mapper(Sub, subtable, inherits=Base, polymorphic_identity=2)        sess = create_session()        b1 = Base(value='b1')        s1 = Sub(value='sub1', subdata='some subdata')        sess.save(b1)        sess.save(s1)        sess.flush()        sess2 = create_session()        s2 = sess2.query(Base).get(s1.id)        s2.subdata = 'sess2 subdata'        s1.subdata = 'sess1 subdata'        sess.flush()        try:            sess2.query(Base).with_lockmode('read').get(s1.id)            assert False        except exceptions.ConcurrentModificationError, e:            assert True        try:            sess2.flush()            assert False        except exceptions.ConcurrentModificationError, e:            assert True        sess2.refresh(s2)        assert s2.subdata == 'sess1 subdata'        s2.subdata = 'sess2 subdata'        sess2.flush()    def test_delete(self):        class Base(fixtures.Base):            pass        class Sub(Base):            pass        mapper(Base, base, polymorphic_on=base.c.discriminator, version_id_col=base.c.version_id, polymorphic_identity=1)        mapper(Sub, subtable, inherits=Base, polymorphic_identity=2)        sess = create_session()        b1 = Base(value='b1')        s1 = Sub(value='sub1', subdata='some subdata')        s2 = Sub(value='sub2', subdata='some other subdata')        sess.save(b1)        sess.save(s1)        sess.save(s2)        sess.flush()        sess2 = create_session()        s3 = sess2.query(Base).get(s1.id)        sess2.delete(s3)        sess2.flush()        s2.subdata = 'some new subdata'        sess.flush()        try:            s1.subdata = 'some new subdata'            sess.flush()            assert False        except exceptions.ConcurrentModificationError, e:            assert Trueclass DistinctPKTest(ORMTest):    """test the construction of mapper.primary_key when an inheriting relationship    joins on a column other than primary key column."""    keep_data = True    def define_tables(self, metadata):        global person_table, employee_table, Person, Employee        person_table = Table("persons", metadata,                Column("id", Integer, primary_key=True),                Column("name", String(80)),                )        employee_table = Table("employees", metadata,                Column("id", Integer, primary_key=True),                Column("salary", Integer),                Column("person_id", Integer, ForeignKey("persons.id")),                )        class Person(object):            def __init__(self, name):                self.name = name        class Employee(Person): pass    def insert_data(self):        person_insert = person_table.insert()        person_insert.execute(id=1, name='alice')        person_insert.execute(id=2, name='bob')        employee_insert = employee_table.insert()        employee_insert.execute(id=2, salary=250, person_id=1) # alice        employee_insert.execute(id=3, salary=200, person_id=2) # bob    def test_implicit(self):        person_mapper = mapper(Person, person_table)        mapper(Employee, employee_table, inherits=person_mapper)        assert list(class_mapper(Employee).primary_key) == [person_table.c.id]    def test_explicit_props(self):        person_mapper = mapper(Person, person_table)        mapper(Employee, employee_table, inherits=person_mapper, properties={'pid':person_table.c.id, 'eid':employee_table.c.id})        self._do_test(True)    def test_explicit_composite_pk(self):        person_mapper = mapper(Person, person_table)        try:            mapper(Employee, employee_table, inherits=person_mapper, primary_key=[person_table.c.id, employee_table.c.id])            self._do_test(True)            assert False        except exceptions.SAWarning, e:            assert str(e) == "On mapper Mapper|Employee|employees, primary key column 'employees.id' is being combined with distinct primary key column 'persons.id' in attribute 'id'.  Use explicit properties to give each column its own mapped attribute name.", str(e)    def test_explicit_pk(self):        person_mapper = mapper(Person, person_table)        mapper(Employee, employee_table, inherits=person_mapper, primary_key=[person_table.c.id])        self._do_test(False)    def _do_test(self, composite):        session = create_session()        query = session.query(Employee)        if composite:            alice1 = query.get([1,2])            bob = query.get([2,3])            alice2 = query.get([1,2])        else:            alice1 = query.get(1)            bob = query.get(2)            alice2 = query.get(1)            assert alice1.name == alice2.name == 'alice'            assert bob.name == 'bob'class SyncCompileTest(ORMTest):    """test that syncrules compile properly on custom inherit conds"""    def define_tables(self, metadata):        global _a_table, _b_table, _c_table        _a_table = Table('a', metadata,           Column('id', Integer, primary_key=True),           Column('data1', String(128))        )        _b_table = Table('b', metadata,           Column('a_id', Integer, ForeignKey('a.id'), primary_key=True),           Column('data2', String(128))        )        _c_table = Table('c', metadata,        #   Column('a_id', Integer, ForeignKey('b.a_id'), primary_key=True), #works           Column('b_a_id', Integer, ForeignKey('b.a_id'), primary_key=True),           Column('data3', String(128))        )    def test_joins(self):        for j1 in (None, _b_table.c.a_id==_a_table.c.id, _a_table.c.id==_b_table.c.a_id):            for j2 in (None, _b_table.c.a_id==_c_table.c.b_a_id, _c_table.c.b_a_id==_b_table.c.a_id):                self._do_test(j1, j2)                for t in _a_table.metadata.table_iterator(reverse=True):                    t.delete().execute().close()    def _do_test(self, j1, j2):        class A(object):           def __init__(self, **kwargs):               for key, value in kwargs.items():                    setattr(self, key, value)        class B(A):            pass        class C(B):            pass        mapper(A, _a_table)        mapper(B, _b_table, inherits=A,               inherit_condition=j1               )        mapper(C, _c_table, inherits=B,               inherit_condition=j2               )        session = create_session()        a = A(data1='a1')        session.save(a)        b = B(data1='b1', data2='b2')        session.save(b)        c = C(data1='c1', data2='c2', data3='c3')        session.save(c)        session.flush()        session.clear()        assert len(session.query(A).all()) == 3        assert len(session.query(B).all()) == 2        assert len(session.query(C).all()) == 1if __name__ == "__main__":    testenv.main()

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -