import sys import testbase from sqlalchemy import * class CaseTest(testbase.PersistTest): def setUpAll(self): global info_table info_table = Table('infos', testbase.db, Column('pk', Integer, primary_key=True), Column('info', String(30))) info_table.create() info_table.insert().execute( {'pk':1, 'info':'pk_1_data'}, {'pk':2, 'info':'pk_2_data'}, {'pk':3, 'info':'pk_3_data'}, {'pk':4, 'info':'pk_4_data'}, {'pk':5, 'info':'pk_5_data'}) def tearDownAll(self): info_table.drop() def testcase(self): inner = select([case([[info_table.c.pk < 3, literal('lessthan3', type=String)], [info_table.c.pk >= 3, literal('gt3', type=String)]]).label('x'), info_table.c.pk, info_table.c.info], from_obj=[info_table]).alias('q_inner') inner_result = inner.execute().fetchall() # Outputs: # lessthan3 1 pk_1_data # lessthan3 2 pk_2_data # gt3 3 pk_3_data # gt3 4 pk_4_data # gt3 5 pk_5_data assert inner_result == [ ('lessthan3', 1, 'pk_1_data'), ('lessthan3', 2, 'pk_2_data'), ('gt3', 3, 'pk_3_data'), ('gt3', 4, 'pk_4_data'), ('gt3', 5, 'pk_5_data'), ] outer = select([inner]) outer_result = outer.execute().fetchall() assert outer_result == [ ('lessthan3', 1, 'pk_1_data'), ('lessthan3', 2, 'pk_2_data'), ('gt3', 3, 'pk_3_data'), ('gt3', 4, 'pk_4_data'), ('gt3', 5, 'pk_5_data'), ] if __name__ == "__main__": testbase.main()