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

📄 query.py

📁 SQLAlchemy. 经典的Python ORM框架。学习必看。
💻 PY
📖 第 1 页 / 共 3 页
字号:
        wanted = [('aaa', 'aaa'), ('aaa', 'ccc'), ('bbb', 'aaa'),                  ('bbb', 'bbb'), ('ccc', 'bbb'), ('ccc', 'ccc')]        found1 = self._fetchall_sorted(e.execute())        self.assertEquals(found1, wanted)        found2 = self._fetchall_sorted(e.alias('bar').select().execute())        self.assertEquals(found2, wanted)    @testing.unsupported('firebird', 'mysql', 'oracle', 'sqlite', 'sybase')    def test_except_style3(self):        # aaa, bbb, ccc - (aaa, bbb, ccc - (ccc)) = ccc        e = except_(            select([t1.c.col3]), # aaa, bbb, ccc            except_(                select([t2.c.col3]), # aaa, bbb, ccc                select([t3.c.col3], t3.c.col3 == 'ccc'), #ccc            )        )        self.assertEquals(e.execute().fetchall(), [('ccc',)])        self.assertEquals(e.alias('foo').select().execute().fetchall(),                          [('ccc',)])    @testing.unsupported('firebird', 'mysql')    def test_composite(self):        u = intersect(            select([t2.c.col3, t2.c.col4]),            union(                select([t1.c.col3, t1.c.col4]),                select([t2.c.col3, t2.c.col4]),                select([t3.c.col3, t3.c.col4]),            ).alias('foo').select()        )        wanted = [('aaa', 'bbb'), ('bbb', 'ccc'), ('ccc', 'aaa')]        found = self._fetchall_sorted(u.execute())        self.assertEquals(found, wanted)    @testing.unsupported('firebird', 'mysql')    def test_composite_alias(self):        ua = intersect(            select([t2.c.col3, t2.c.col4]),            union(                select([t1.c.col3, t1.c.col4]),                select([t2.c.col3, t2.c.col4]),                select([t3.c.col3, t3.c.col4]),            ).alias('foo').select()        ).alias('bar')        wanted = [('aaa', 'bbb'), ('bbb', 'ccc'), ('ccc', 'aaa')]        found = self._fetchall_sorted(ua.select().execute())        self.assertEquals(found, wanted)class JoinTest(TestBase):    """Tests join execution.    The compiled SQL emitted by the dialect might be ANSI joins or    theta joins ('old oracle style', with (+) for OUTER).  This test    tries to exercise join syntax and uncover any inconsistencies in    `JOIN rhs ON lhs.col=rhs.col` vs `rhs.col=lhs.col`.  At least one    database seems to be sensitive to this.    """    def setUpAll(self):        global metadata        global t1, t2, t3        metadata = MetaData(testing.db)        t1 = Table('t1', metadata,                   Column('t1_id', Integer, primary_key=True),                   Column('name', String(32)))        t2 = Table('t2', metadata,                   Column('t2_id', Integer, primary_key=True),                   Column('t1_id', Integer, ForeignKey('t1.t1_id')),                   Column('name', String(32)))        t3 = Table('t3', metadata,                   Column('t3_id', Integer, primary_key=True),                   Column('t2_id', Integer, ForeignKey('t2.t2_id')),                   Column('name', String(32)))        metadata.drop_all()        metadata.create_all()        # t1.10 -> t2.20 -> t3.30        # t1.11 -> t2.21        # t1.12        t1.insert().execute({'t1_id': 10, 'name': 't1 #10'},                            {'t1_id': 11, 'name': 't1 #11'},                            {'t1_id': 12, 'name': 't1 #12'})        t2.insert().execute({'t2_id': 20, 't1_id': 10, 'name': 't2 #20'},                            {'t2_id': 21, 't1_id': 11, 'name': 't2 #21'})        t3.insert().execute({'t3_id': 30, 't2_id': 20, 'name': 't3 #30'})    def tearDownAll(self):        metadata.drop_all()    def assertRows(self, statement, expected):        """Execute a statement and assert that rows returned equal expected."""        found = sorted([tuple(row)                       for row in statement.execute().fetchall()])        self.assertEquals(found, sorted(expected))    def test_join_x1(self):        """Joins t1->t2."""        for criteria in (t1.c.t1_id==t2.c.t1_id, t2.c.t1_id==t1.c.t1_id):            expr = select(                [t1.c.t1_id, t2.c.t2_id],                from_obj=[t1.join(t2, criteria)])            self.assertRows(expr, [(10, 20), (11, 21)])    def test_join_x2(self):        """Joins t1->t2->t3."""        for criteria in (t1.c.t1_id==t2.c.t1_id, t2.c.t1_id==t1.c.t1_id):            expr = select(                [t1.c.t1_id, t2.c.t2_id],                from_obj=[t1.join(t2, criteria)])            self.assertRows(expr, [(10, 20), (11, 21)])    def test_outerjoin_x1(self):        """Outer joins t1->t2."""        for criteria in (t2.c.t2_id==t3.c.t2_id, t3.c.t2_id==t2.c.t2_id):            expr = select(                [t1.c.t1_id, t2.c.t2_id],                from_obj=[t1.join(t2).join(t3, criteria)])            self.assertRows(expr, [(10, 20)])    def test_outerjoin_x2(self):        """Outer joins t1->t2,t3."""        for criteria in (t2.c.t2_id==t3.c.t2_id, t3.c.t2_id==t2.c.t2_id):            expr = select(                [t1.c.t1_id, t2.c.t2_id, t3.c.t3_id],                from_obj=[t1.outerjoin(t2, t1.c.t1_id==t2.c.t1_id). \                          outerjoin(t3, criteria)])            self.assertRows(expr, [(10, 20, 30), (11, 21, None), (12, None, None)])    def test_outerjoin_where_x2_t1(self):        """Outer joins t1->t2,t3, where on t1."""        for criteria in (t2.c.t2_id==t3.c.t2_id, t3.c.t2_id==t2.c.t2_id):            expr = select(                [t1.c.t1_id, t2.c.t2_id, t3.c.t3_id],                t1.c.name == 't1 #10',                from_obj=[(t1.outerjoin(t2, t1.c.t1_id==t2.c.t1_id).                           outerjoin(t3, criteria))])            self.assertRows(expr, [(10, 20, 30)])            expr = select(                [t1.c.t1_id, t2.c.t2_id, t3.c.t3_id],                t1.c.t1_id < 12,                from_obj=[(t1.outerjoin(t2, t1.c.t1_id==t2.c.t1_id).                           outerjoin(t3, criteria))])            self.assertRows(expr, [(10, 20, 30), (11, 21, None)])    def test_outerjoin_where_x2_t2(self):        """Outer joins t1->t2,t3, where on t2."""        for criteria in (t2.c.t2_id==t3.c.t2_id, t3.c.t2_id==t2.c.t2_id):            expr = select(                [t1.c.t1_id, t2.c.t2_id, t3.c.t3_id],                t2.c.name == 't2 #20',                from_obj=[(t1.outerjoin(t2, t1.c.t1_id==t2.c.t1_id).                           outerjoin(t3, criteria))])            self.assertRows(expr, [(10, 20, 30)])            expr = select(                [t1.c.t1_id, t2.c.t2_id, t3.c.t3_id],                t2.c.t2_id < 29,                from_obj=[(t1.outerjoin(t2, t1.c.t1_id==t2.c.t1_id).                           outerjoin(t3, criteria))])            self.assertRows(expr, [(10, 20, 30), (11, 21, None)])    def test_outerjoin_where_x2_t1t2(self):        """Outer joins t1->t2,t3, where on t1 and t2."""        for criteria in (t2.c.t2_id==t3.c.t2_id, t3.c.t2_id==t2.c.t2_id):            expr = select(                [t1.c.t1_id, t2.c.t2_id, t3.c.t3_id],                and_(t1.c.name == 't1 #10', t2.c.name == 't2 #20'),                from_obj=[(t1.outerjoin(t2, t1.c.t1_id==t2.c.t1_id).                           outerjoin(t3, criteria))])            self.assertRows(expr, [(10, 20, 30)])            expr = select(                [t1.c.t1_id, t2.c.t2_id, t3.c.t3_id],                and_(t1.c.t1_id < 19, 29 > t2.c.t2_id),                from_obj=[(t1.outerjoin(t2, t1.c.t1_id==t2.c.t1_id).                           outerjoin(t3, criteria))])            self.assertRows(expr, [(10, 20, 30), (11, 21, None)])    def test_outerjoin_where_x2_t3(self):        """Outer joins t1->t2,t3, where on t3."""        for criteria in (t2.c.t2_id==t3.c.t2_id, t3.c.t2_id==t2.c.t2_id):            expr = select(                [t1.c.t1_id, t2.c.t2_id, t3.c.t3_id],                t3.c.name == 't3 #30',                from_obj=[(t1.outerjoin(t2, t1.c.t1_id==t2.c.t1_id).                           outerjoin(t3, criteria))])            self.assertRows(expr, [(10, 20, 30)])            expr = select(                [t1.c.t1_id, t2.c.t2_id, t3.c.t3_id],                t3.c.t3_id < 39,                from_obj=[(t1.outerjoin(t2, t1.c.t1_id==t2.c.t1_id).                           outerjoin(t3, criteria))])            self.assertRows(expr, [(10, 20, 30)])    def test_outerjoin_where_x2_t1t3(self):        """Outer joins t1->t2,t3, where on t1 and t3."""        for criteria in (t2.c.t2_id==t3.c.t2_id, t3.c.t2_id==t2.c.t2_id):            expr = select(                [t1.c.t1_id, t2.c.t2_id, t3.c.t3_id],                and_(t1.c.name == 't1 #10', t3.c.name == 't3 #30'),                from_obj=[(t1.outerjoin(t2, t1.c.t1_id==t2.c.t1_id).                           outerjoin(t3, criteria))])            self.assertRows(expr, [(10, 20, 30)])            expr = select(                [t1.c.t1_id, t2.c.t2_id, t3.c.t3_id],                and_(t1.c.t1_id < 19, t3.c.t3_id < 39),                from_obj=[(t1.outerjoin(t2, t1.c.t1_id==t2.c.t1_id).                           outerjoin(t3, criteria))])            self.assertRows(expr, [(10, 20, 30)])    def test_outerjoin_where_x2_t1t2(self):        """Outer joins t1->t2,t3, where on t1 and t2."""        for criteria in (t2.c.t2_id==t3.c.t2_id, t3.c.t2_id==t2.c.t2_id):            expr = select(                [t1.c.t1_id, t2.c.t2_id, t3.c.t3_id],                and_(t1.c.name == 't1 #10', t2.c.name == 't2 #20'),                from_obj=[(t1.outerjoin(t2, t1.c.t1_id==t2.c.t1_id).                           outerjoin(t3, criteria))])            self.assertRows(expr, [(10, 20, 30)])            expr = select(                [t1.c.t1_id, t2.c.t2_id, t3.c.t3_id],                and_(t1.c.t1_id < 12, t2.c.t2_id < 39),                from_obj=[(t1.outerjoin(t2, t1.c.t1_id==t2.c.t1_id).                           outerjoin(t3, criteria))])            self.assertRows(expr, [(10, 20, 30), (11, 21, None)])    def test_outerjoin_where_x2_t1t2t3(self):        """Outer joins t1->t2,t3, where on t1, t2 and t3."""        for criteria in (t2.c.t2_id==t3.c.t2_id, t3.c.t2_id==t2.c.t2_id):            expr = select(                [t1.c.t1_id, t2.c.t2_id, t3.c.t3_id],                and_(t1.c.name == 't1 #10',                     t2.c.name == 't2 #20',                     t3.c.name == 't3 #30'),                from_obj=[(t1.outerjoin(t2, t1.c.t1_id==t2.c.t1_id).                           outerjoin(t3, criteria))])            self.assertRows(expr, [(10, 20, 30)])            expr = select(                [t1.c.t1_id, t2.c.t2_id, t3.c.t3_id],                and_(t1.c.t1_id < 19,                     t2.c.t2_id < 29,                     t3.c.t3_id < 39),                from_obj=[(t1.outerjoin(t2, t1.c.t1_id==t2.c.t1_id).                           outerjoin(t3, criteria))])            self.assertRows(expr, [(10, 20, 30)])    def test_mixed(self):        """Joins t1->t2, outer t2->t3."""        for criteria in (t2.c.t2_id==t3.c.t2_id, t3.c.t2_id==t2.c.t2_id):            expr = select(                [t1.c.t1_id, t2.c.t2_id, t3.c.t3_id],                from_obj=[(t1.join(t2).outerjoin(t3, criteria))])            print expr            self.assertRows(expr, [(10, 20, 30), (11, 21, None)])    def test_mixed_where(self):        """Joins t1->t2, outer t2->t3, plus a where on each table in turn."""        for criteria in (t2.c.t2_id==t3.c.t2_id, t3.c.t2_id==t2.c.t2_id):            expr = select(                [t1.c.t1_id, t2.c.t2_id, t3.c.t3_id],                t1.c.name == 't1 #10',                from_obj=[(t1.join(t2).outerjoin(t3, criteria))])            self.assertRows(expr, [(10, 20, 30)])            expr = select(                [t1.c.t1_id, t2.c.t2_id, t3.c.t3_id],                t2.c.name == 't2 #20',                from_obj=[(t1.join(t2).outerjoin(t3, criteria))])            self.assertRows(expr, [(10, 20, 30)])            expr = select(                [t1.c.t1_id, t2.c.t2_id, t3.c.t3_id],                t3.c.name == 't3 #30',                from_obj=[(t1.join(t2).outerjoin(t3, criteria))])            self.assertRows(expr, [(10, 20, 30)])            expr = select(                [t1.c.t1_id, t2.c.t2_id, t3.c.t3_id],                and_(t1.c.name == 't1 #10', t2.c.name == 't2 #20'),                from_obj=[(t1.join(t2).outerjoin(t3, criteria))])            self.assertRows(expr, [(10, 20, 30)])            expr = select(                [t1.c.t1_id, t2.c.t2_id, t3.c.t3_id],                and_(t2.c.name == 't2 #20', t3.c.name == 't3 #30'),                from_obj=[(t1.join(t2).outerjoin(t3, criteria))])            self.assertRows(expr, [(10, 20, 30)])            expr = select(                [t1.c.t1_id, t2.c.t2_id, t3.c.t3_id],                and_(t1.c.name == 't1 #10',                     t2.c.name == 't2 #20',                     t3.c.name == 't3 #30'),                from_obj=[(t1.join(t2).outerjoin(t3, criteria))])            self.assertRows(expr, [(10, 20, 30)])class OperatorTest(TestBase):    def setUpAll(self):        global metadata, flds        metadata = MetaData(testing.db)        flds = Table('flds', metadata,            Column('idcol', Integer, Sequence('t1pkseq'), primary_key=True),            Column('intcol', Integer),            Column('strcol', String(50)),            )        metadata.create_all()        flds.insert().execute([            dict(intcol=5, strcol='foo'),            dict(intcol=13, strcol='bar')        ])    def tearDownAll(self):        metadata.drop_all()    @testing.fails_on('maxdb')    def test_modulo(self):        self.assertEquals(            select([flds.c.intcol % 3],                   order_by=flds.c.idcol).execute().fetchall(),            [(2,),(1,)]        )if __name__ == "__main__":    testenv.main()

⌨️ 快捷键说明

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