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

📄 select.py

📁 SQLAlchemy. 经典的Python ORM框架。学习必看。
💻 PY
📖 第 1 页 / 共 5 页
字号:
                positional = stmt.compile(dialect=sqlite.dialect())                pp = positional.get_params()                assert [pp[k] for k in positional.positiontup] == expected_default_params_list                assert nonpositional.get_params(**test_param_dict) == expected_test_params_dict, "expected :%s got %s" % (str(expected_test_params_dict), str(nonpositional.get_params(**test_param_dict)))                pp = positional.get_params(**test_param_dict)                assert [pp[k] for k in positional.positiontup] == expected_test_params_list        # check that params() doesnt modify original statement        s = select([table1], or_(table1.c.myid==bindparam('myid'), table2.c.otherid==bindparam('myotherid')))        s2 = s.params({'myid':8, 'myotherid':7})        s3 = s2.params({'myid':9})        assert s.compile().params == {'myid':None, 'myotherid':None}        assert s2.compile().params == {'myid':8, 'myotherid':7}        assert s3.compile().params == {'myid':9, 'myotherid':7}        # test using same 'unique' param object twice in one compile        s = select([table1.c.myid]).where(table1.c.myid==12).as_scalar()        s2 = select([table1, s], table1.c.myid==s)        self.assert_compile(s2,            "SELECT mytable.myid, mytable.name, mytable.description, (SELECT mytable.myid FROM mytable WHERE mytable.myid = "\            ":mytable_myid_1) AS anon_1 FROM mytable WHERE mytable.myid = (SELECT mytable.myid FROM mytable WHERE mytable.myid = :mytable_myid_1)")        positional = s2.compile(dialect=sqlite.dialect())        pp = positional.get_params()        assert [pp[k] for k in positional.positiontup] == [12, 12]        # check that conflicts with "unique" params are caught        s = select([table1], or_(table1.c.myid==7, table1.c.myid==bindparam('mytable_myid_1')))        try:            print str(s)            assert False        except exceptions.CompileError, err:            assert str(err) == "Bind parameter 'mytable_myid_1' conflicts with unique bind parameter of the same name"        s = select([table1], or_(table1.c.myid==7, table1.c.myid==8, table1.c.myid==bindparam('mytable_myid_1')))        try:            str(s)            assert False        except exceptions.CompileError, err:            assert str(err) == "Bind parameter 'mytable_myid_1' conflicts with unique bind parameter of the same name"    def test_bind_as_col(self):        t = table('foo', column('id'))        s = select([t, literal('lala').label('hoho')])        self.assert_compile(s, "SELECT foo.id, :param_1 AS hoho FROM foo")        assert [str(c) for c in s.c] == ["id", "hoho"]    def test_in(self):        self.assert_compile(select([table1], table1.c.myid.in_(['a'])),        "SELECT mytable.myid, mytable.name, mytable.description FROM mytable WHERE mytable.myid IN (:mytable_myid_1)")        self.assert_compile(select([table1], ~table1.c.myid.in_(['a'])),        "SELECT mytable.myid, mytable.name, mytable.description FROM mytable WHERE mytable.myid NOT IN (:mytable_myid_1)")        self.assert_compile(select([table1], table1.c.myid.in_(['a', 'b'])),        "SELECT mytable.myid, mytable.name, mytable.description FROM mytable WHERE mytable.myid IN (:mytable_myid_1, :mytable_myid_2)")        self.assert_compile(select([table1], table1.c.myid.in_(iter(['a', 'b']))),        "SELECT mytable.myid, mytable.name, mytable.description FROM mytable WHERE mytable.myid IN (:mytable_myid_1, :mytable_myid_2)")        self.assert_compile(select([table1], table1.c.myid.in_([literal('a')])),        "SELECT mytable.myid, mytable.name, mytable.description FROM mytable WHERE mytable.myid IN (:param_1)")        self.assert_compile(select([table1], table1.c.myid.in_([literal('a'), 'b'])),        "SELECT mytable.myid, mytable.name, mytable.description FROM mytable WHERE mytable.myid IN (:param_1, :mytable_myid_1)")        self.assert_compile(select([table1], table1.c.myid.in_([literal('a'), literal('b')])),        "SELECT mytable.myid, mytable.name, mytable.description FROM mytable WHERE mytable.myid IN (:param_1, :param_2)")        self.assert_compile(select([table1], table1.c.myid.in_(['a', literal('b')])),        "SELECT mytable.myid, mytable.name, mytable.description FROM mytable WHERE mytable.myid IN (:mytable_myid_1, :param_1)")        self.assert_compile(select([table1], table1.c.myid.in_([literal(1) + 'a'])),        "SELECT mytable.myid, mytable.name, mytable.description FROM mytable WHERE mytable.myid IN (:param_1 + :param_2)")        self.assert_compile(select([table1], table1.c.myid.in_([literal('a') +'a', 'b'])),        "SELECT mytable.myid, mytable.name, mytable.description FROM mytable WHERE mytable.myid IN (:param_1 || :param_2, :mytable_myid_1)")        self.assert_compile(select([table1], table1.c.myid.in_([literal('a') + literal('a'), literal('b')])),        "SELECT mytable.myid, mytable.name, mytable.description FROM mytable WHERE mytable.myid IN (:param_1 || :param_2, :param_3)")        self.assert_compile(select([table1], table1.c.myid.in_([1, literal(3) + 4])),        "SELECT mytable.myid, mytable.name, mytable.description FROM mytable WHERE mytable.myid IN (:mytable_myid_1, :param_1 + :param_2)")        self.assert_compile(select([table1], table1.c.myid.in_([literal('a') < 'b'])),        "SELECT mytable.myid, mytable.name, mytable.description FROM mytable WHERE mytable.myid IN (:param_1 < :param_2)")        self.assert_compile(select([table1], table1.c.myid.in_([table1.c.myid])),        "SELECT mytable.myid, mytable.name, mytable.description FROM mytable WHERE mytable.myid IN (mytable.myid)")        self.assert_compile(select([table1], table1.c.myid.in_(['a', table1.c.myid])),        "SELECT mytable.myid, mytable.name, mytable.description FROM mytable WHERE mytable.myid IN (:mytable_myid_1, mytable.myid)")        self.assert_compile(select([table1], table1.c.myid.in_([literal('a'), table1.c.myid])),        "SELECT mytable.myid, mytable.name, mytable.description FROM mytable WHERE mytable.myid IN (:param_1, mytable.myid)")        self.assert_compile(select([table1], table1.c.myid.in_([literal('a'), table1.c.myid +'a'])),        "SELECT mytable.myid, mytable.name, mytable.description FROM mytable WHERE mytable.myid IN (:param_1, mytable.myid + :mytable_myid_1)")        self.assert_compile(select([table1], table1.c.myid.in_([literal(1), 'a' + table1.c.myid])),        "SELECT mytable.myid, mytable.name, mytable.description FROM mytable WHERE mytable.myid IN (:param_1, :mytable_myid_1 + mytable.myid)")        self.assert_compile(select([table1], table1.c.myid.in_([1, 2, 3])),        "SELECT mytable.myid, mytable.name, mytable.description FROM mytable WHERE mytable.myid IN (:mytable_myid_1, :mytable_myid_2, :mytable_myid_3)")        self.assert_compile(select([table1], table1.c.myid.in_(select([table2.c.otherid]))),        "SELECT mytable.myid, mytable.name, mytable.description FROM mytable WHERE mytable.myid IN (SELECT myothertable.otherid FROM myothertable)")        self.assert_compile(select([table1], ~table1.c.myid.in_(select([table2.c.otherid]))),        "SELECT mytable.myid, mytable.name, mytable.description FROM mytable WHERE mytable.myid NOT IN (SELECT myothertable.otherid FROM myothertable)")        self.assert_compile(select([table1], table1.c.myid.in_(            union(                  select([table1], table1.c.myid == 5),                  select([table1], table1.c.myid == 12),            )        )), "SELECT mytable.myid, mytable.name, mytable.description FROM mytable \WHERE mytable.myid IN (\SELECT mytable.myid, mytable.name, mytable.description FROM mytable WHERE mytable.myid = :mytable_myid_1 \UNION SELECT mytable.myid, mytable.name, mytable.description FROM mytable WHERE mytable.myid = :mytable_myid_2)")        # test that putting a select in an IN clause does not blow away its ORDER BY clause        self.assert_compile(            select([table1, table2],                table2.c.otherid.in_(                    select([table2.c.otherid], order_by=[table2.c.othername], limit=10, correlate=False)                ),                from_obj=[table1.join(table2, table1.c.myid==table2.c.otherid)], order_by=[table1.c.myid]            ),            "SELECT mytable.myid, mytable.name, mytable.description, myothertable.otherid, myothertable.othername FROM mytable "\            "JOIN myothertable ON mytable.myid = myothertable.otherid WHERE myothertable.otherid IN (SELECT myothertable.otherid "\            "FROM myothertable ORDER BY myothertable.othername  LIMIT 10) ORDER BY mytable.myid"        )        # test empty in clause        self.assert_compile(select([table1], table1.c.myid.in_([])),        "SELECT mytable.myid, mytable.name, mytable.description FROM mytable WHERE (CASE WHEN (mytable.myid IS NULL) THEN NULL ELSE 0 END = 1)")    @testing.uses_deprecated('passing in_')    def test_in_deprecated_api(self):        self.assert_compile(select([table1], table1.c.myid.in_('abc')),        "SELECT mytable.myid, mytable.name, mytable.description FROM mytable WHERE mytable.myid IN (:mytable_myid_1)")        self.assert_compile(select([table1], table1.c.myid.in_(1)),        "SELECT mytable.myid, mytable.name, mytable.description FROM mytable WHERE mytable.myid IN (:mytable_myid_1)")        self.assert_compile(select([table1], table1.c.myid.in_(1,2)),        "SELECT mytable.myid, mytable.name, mytable.description FROM mytable WHERE mytable.myid IN (:mytable_myid_1, :mytable_myid_2)")        self.assert_compile(select([table1], table1.c.myid.in_()),        "SELECT mytable.myid, mytable.name, mytable.description FROM mytable WHERE (CASE WHEN (mytable.myid IS NULL) THEN NULL ELSE 0 END = 1)")    def test_cast(self):        tbl = table('casttest',                    column('id', Integer),                    column('v1', Float),                    column('v2', Float),                    column('ts', TIMESTAMP),                    )        def check_results(dialect, expected_results, literal):            self.assertEqual(len(expected_results), 5, 'Incorrect number of expected results')            self.assertEqual(str(cast(tbl.c.v1, Numeric).compile(dialect=dialect)), 'CAST(casttest.v1 AS %s)' %expected_results[0])            self.assertEqual(str(cast(tbl.c.v1, Numeric(12, 9)).compile(dialect=dialect)), 'CAST(casttest.v1 AS %s)' %expected_results[1])            self.assertEqual(str(cast(tbl.c.ts, Date).compile(dialect=dialect)), 'CAST(casttest.ts AS %s)' %expected_results[2])            self.assertEqual(str(cast(1234, TEXT).compile(dialect=dialect)), 'CAST(%s AS %s)' %(literal, expected_results[3]))            self.assertEqual(str(cast('test', String(20)).compile(dialect=dialect)), 'CAST(%s AS %s)' %(literal, expected_results[4]))            # fixme: shoving all of this dialect-specific stuff in one test            # is now officialy completely ridiculous AND non-obviously omits            # coverage on other dialects.            sel = select([tbl, cast(tbl.c.v1, Numeric)]).compile(dialect=dialect)            if isinstance(dialect, type(mysql.dialect())):                self.assertEqual(str(sel), "SELECT casttest.id, casttest.v1, casttest.v2, casttest.ts, CAST(casttest.v1 AS DECIMAL(10, 2)) AS anon_1 \nFROM casttest")            else:                self.assertEqual(str(sel), "SELECT casttest.id, casttest.v1, casttest.v2, casttest.ts, CAST(casttest.v1 AS NUMERIC(10, 2)) AS anon_1 \nFROM casttest")        # first test with Postgres engine        check_results(postgres.dialect(), ['NUMERIC(10, 2)', 'NUMERIC(12, 9)', 'DATE', 'TEXT', 'VARCHAR(20)'], '%(param_1)s')        # then the Oracle engine        check_results(oracle.dialect(), ['NUMERIC(10, 2)', 'NUMERIC(12, 9)', 'DATE', 'CLOB', 'VARCHAR(20)'], ':param_1')        # then the sqlite engine        check_results(sqlite.dialect(), ['NUMERIC(10, 2)', 'NUMERIC(12, 9)', 'DATE', 'TEXT', 'VARCHAR(20)'], '?')        # then the MySQL engine        check_results(mysql.dialect(), ['DECIMAL(10, 2)', 'DECIMAL(12, 9)', 'DATE', 'CHAR', 'CHAR(20)'], '%s')        self.assert_compile(cast(text('NULL'), Integer), "CAST(NULL AS INTEGER)", dialect=sqlite.dialect())        self.assert_compile(cast(null(), Integer), "CAST(NULL AS INTEGER)", dialect=sqlite.dialect())        self.assert_compile(cast(literal_column('NULL'), Integer), "CAST(NULL AS INTEGER)", dialect=sqlite.dialect())            def test_date_between(self):        import datetime        table = Table('dt', metadata,            Column('date', Date))        self.assert_compile(table.select(table.c.date.between(datetime.date(2006,6,1), datetime.date(2006,6,5))),            "SELECT dt.date FROM dt WHERE dt.date BETWEEN :dt_date_1 AND :dt_date_2", checkparams={'dt_date_1':datetime.date(2006,6,1), 'dt_date_2':datetime.date(2006,6,5)})        self.assert_compile(table.select(sql.between(table.c.date, datetime.date(2006,6,1), datetime.date(2006,6,5))),            "SELECT dt.date FROM dt WHERE dt.date BETWEEN :param_1 AND :param_2", checkparams={'param_1':datetime.date(2006,6,1), 'param_2':datetime.date(2006,6,5)})    def test_operator_precedence(self):        table = Table('op', metadata,            Column('field', Integer))        self.assert_compile(table.select((table.c.field == 5) == None),            "SELECT op.field FROM op WHERE (op.field = :op_field_1) IS NULL")        self.assert_compile(table.select((table.c.field + 5) == table.c.field),            "SELECT op.field FROM op WHERE op.field + :op_field_1 = op.field")        self.assert_compile(table.select((table.c.field + 5) * 6),            "SELECT op.field FROM op WHERE (op.field + :op_field_1) * :param_1")        self.assert_compile(table.select((table.c.field * 5) + 6),            "SELECT op.field FROM op WHERE op.field * :op_field_1 + :param_1")        self.assert_compile(table.select(5 + table.c.field.in_([5,6])),            "SELECT op.field FROM op WHERE :param_1 + (op.field IN (:op_field_1, :op_field_2))")        self.assert_compile(table.select((5 + table.c.field).in_([5,6])),            "SELECT op.field FROM op WHERE :op_field_1 + op.field IN (:param_1, :param_2)")        self.assert_compile(table.select(not_(and_(table.c.field == 5, table.c.field == 7))),            "SELECT op.field FROM op WHERE NOT (op.field = :op_field_1 AND op.field = :op_field_2)")        self.assert_compile(table.select(not_(table.c.field == 5)),            "SELECT op.field FROM op WHERE op.field != :op_field_1")        self.assert_compile(table.select(not_(table.c.field.between(5, 6))),            "SELECT op.field FROM op WHERE NOT (op.field BETWEEN :op_field_1 AND :op_field_2)")        self.assert_compile(table.select(not_(table.c.field) == 5),            "SELECT op.field FROM op WHERE (NOT op.field) = :param_1")        self.assert_compile(table.select((table.c.field == table.c.field).between(False, True)),            "SELECT op.field FROM op WHERE (op.field = op.field) BETWEEN :param_1 AND :param_2")        self.assert_compile(table.select(between((table.c.field == table.c.field), False, True)),            "SELECT op.field FROM op WHERE (op.field = op.field) BETWEEN :param_1 AND :param_2")        def test_naming(self):        s1 = select([table1.c.myid, table1.c.myid.label('foobar'), func.hoho(table1.c.name), func.lala(table1.c.name).label('gg')])        asser

⌨️ 快捷键说明

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