[Modeling-users] Query bug when not using ec.saveChanges
Status: Abandoned
Brought to you by:
sbigaret
From: Ernesto R. <er...@si...> - 2004-08-10 16:31:03
|
Dear all, just a question: can't I fetch objects by attribute access, without having used ec.saveChanges first? See the last 4 lines of the following source code. What restrictions exist using fetch, in respect with ec.saveChanges? Thanx, Erny """ A simple model +-------+ 1 0,* +--------+ 1 0,* +-------------+ | Hotel |<-hotel------rooms->>| Room |<-room-----reservations->>| Reservation | +-------+ nullify cascade +--------+ nullify cascade +-------------+ | name | | number | | startDay | +-------+ +--------+ | endDay | +-------------+ """ from Modeling.PyModel import * # valores por defecto para el modelo Attribute.defaults['usedForLocking']=1 AString.defaults['externalType']='TEXT' AString.defaults['width'] = 0 AString.defaults['usedForLocking']=1 Association.defaults['delete']=['nullify', 'nullify'] Entity.defaults['properties'] = [ APrimaryKey('id', isClassProperty=0, isRequired=1, doc='PK') ] _connDict = {'database': 'reservations.sqlite'} model = Model('Reservations',adaptorName='SQLite', connDict=_connDict, version='0.1') model.doc=__doc__ model.entities = [ Entity('Hotel', properties=[ AString('name', isRequired=1), ], ), Entity('Room', properties=[ AInteger('number', isRequired=1), ] ), Entity('Reservation', properties=[ ADateTime('startDay', isRequired=1), ADateTime('endDay', isRequired=1), ] ), ] # Associations will allways be defined towards the 'one' part. model.associations = [ Association('Reservation', 'Room', relations=['room','reservations'], multiplicity=[ [1, 1] , [0, None] ], delete=['nullify','cascade']), Association('Room', 'Hotel', relations=['hotel','rooms'], multiplicity=[ [1, 1] , [0, None] ], delete=['nullify','deny']), ] model.build() def test(): from Modeling.EditingContext import EditingContext from mx.DateTime import Date, Time from Reservations.Hotel import Hotel from Reservations.Room import Room from Reservations.Reservation import Reservation ec=EditingContext() h=ec.fetch('Hotel','name == "Ritz"') #!!! tiene q ser "Ritz" no 'Ritz' if not h: h=Hotel(name="Ritz"); ec.insert(h) ec.saveChanges() else: h=h[0] r=ec.fetch('Room','number == 101') if not r: r=Room(number=101); ec.insert(r) r.setHotel(h) ec.saveChanges() else: r=r[0] res=Reservation() ec.insert(res) res.setRoom(r); r.addToReservations(res) res.setStartDay(Date(2004,8,9)); res.setEndDay(Date(2004,8,14)) # ec.saveChanges() ## This does return an instance in each case res=ec.fetch("Reservation",'startDay like "2004-08-09*"') print "res normal fetch:",res ## !!! without ec.saveChanges this does return None !!! res=ec.fetch("Room",'reservations.startDay like "2004-08-09*"') print "res fetch with attribute traversal:",res --- avast! Antivirus: Saliente mensaje limpio. Base de datos de Virus (VPS): 0433-1, 09/08/2004 Comprobado en: 10/08/2004 18:30:15 avast! tiene los derechos reservados (c) 2000-2004 ALWIL Software. http://www.avast.com |