all = [ A( oid=1, time=12, z='a12-last'), A( oid=1, time=2, z='a2' ), A( oid=1, time=6, z='a6' ), A( oid=2, time=2, z='b1' ), A( oid=2, time=4, z='b-last' ), A( oid=3, time=5, z='c5 time-dup' ), A( oid=3, time=5, z='c-last' ), A( oid=4, time=7, z='d-last' ), ] session = sa.session() sa.saveall( session, *all ) session.flush() session.clear() lasts_by_time_obj = set( a for a in all if 'last' in a.z or 'dup' in a.z ) lasts_by_dbid_obj = set( a for a in all if 'last' in a.z ) lasts_by_time_id = set( a.db_id for a in lasts_by_time_obj ) lasts_by_dbid_id = set( a.db_id for a in lasts_by_dbid_obj ) def test( q, expect, obj =True, db_id =True): r = list( q ) #if not obj: r = set( tuple(a) for a in r ) #XXX set(r) won't work! for z in r: print z assert set( (db_id and (obj and x.db_id or x['db_id']) or x) for x in r ) == set( expect), ''' result: %(r)r
a.children.append( b1) a.children.append( B( name='oja', ) ) a2 = A( name='uuk') f1 = Feature( name='hair', value='red') f2 = Feature( name='nose', value='long') f3 = Feature( name='size', value='tall') a.features.extend( [f1,f2, f3] ) a2.features.append( f1) a2.features+= [f1, f2] bf1 = B_Fea( owner=b1, fea=f1) bf2 = B_Fea( owner=b1, fea=f2) b1.ffeas.append( f3) print 11111111111111, b1 return locals() pops = populate() sext = SesExt( fixer=fixer) ses = sadb.session( extension=sext) sadb.saveall( ses, pops) ses.flush() ses.clear() print '============' for a in sadb.query_ALL_instances( ses, A): print a print '============' for a in sadb.query_ALL_instances( ses, B): print a # vim:ts=4:sw=4:expandtab
def str1( me): return reflector.obj2str( me, Base, builder.column4ID.name) Base.__repr__ = Base.__str__ = str1 from svd_util.attr import setattr_kargs Base.__init__ = setattr_kargs from dbcook.usage.samanager import SAdb SAdb.Builder = Builder SAdb.config.getopt() sa = SAdb() sa.open() sa.bind( locals(), fieldtypemap ) population = populate() session = sa.session() sa.saveall( session, population) session.flush() session.close() for klas in [Employee, Engineer, Manager, Hacker, Dept]: for q in [ sa.query_ALL_instances, sa.query_BASE_instances, sa.query_SUB_instances]: print '====', klas, q.__name__ #r = session.query( klas) r = q( session, klas ) #.all() if not r: print r else: for a in r: print a print set('name dept_id'.split()).intersection( a._sa_instance_state.dict ) # vim:ts=4:sw=4:expandtab
Base.__repr__ = Base.__str__ = str1 from svd_util.attr import setattr_kargs Base.__init__ = setattr_kargs from dbcook.usage.samanager import SAdb SAdb.Builder = Builder SAdb.config.getopt() sa = SAdb() sa.open() sa.bind(locals(), fieldtypemap) population = populate() session = sa.session() sa.saveall(session, population) session.flush() session.close() for klas in [Employee, Engineer, Manager, Hacker, Dept]: for q in [ sa.query_ALL_instances, sa.query_BASE_instances, sa.query_SUB_instances ]: print '====', klas, q.__name__ #r = session.query( klas) r = q(session, klas) #.all() if not r: print r else: for a in r: print a
else: raise ValueError, 'A.enum allows random values' a.enum = 'c' a.a_int = 344 a.a_flt = 5.67 a.a_bool = True return locals() return locals() namespace = test_types() SAdb.config.getopt() sa = SAdb() sa.open() sa.bind( namespace, fieldtype_mapper, builder=Builder, base_klas= Base, ) A = namespace[ 'A'] populate = namespace.get( 'populate', None) if populate: populate_namespace = populate() session = sa.session() sa.saveall( session, populate_namespace) session.flush() session = sa.session() query = session.query( A) print '\n'.join( str(r) for r in query ) r = session.query( A).first() print 'enum->value:', r.enum, value_of_AKeyFromDict( r, 'enum') # vim:ts=4:sw=4:expandtab