On Jan 10, 2011, at 2:21 PM, Arturo Sevilla wrote: > Hello, > > Thanks again for the quick reply! > > I tried to isolate all the mapper columns to try to make it less > confusing, now I know that was not a good idea. > > orm.mapper(User, user, properties={ > 'id': user.c.ID, > '_first_name': user.c.FirstName, > '_middle_name': user.c.MiddleName, > '_last_name': user.c.LastName, > '_salutation': user.c.Salutation, > '_username': user.c.Username, > '_password': user.c.Password, > '_personal_email': user.c.PersonalEmail, > '_bussiness_email': user.c.BussinessEmail, > '_birth_date': user.c.BirthDate, > '_profession': user.c.Profession, > '_contact': orm.composite(ContactInformation, user.c.HomePage, > user.c.Telephone, user.c.Fax, > user.c.Nextel), > '_home_address': orm.composite( > Address, > user.c.HomeAddress_Street, > user.c.HomeAddress_City, > user.c.HomeAddress_ZipCode > ), > '_billing_address': orm.composite( > Address, > user.c.BillingAddress_Street, > user.c.BillingAddress_City, > user.c.BillingAddress_ZipCode > ), > 'active': user.c.Active > > }) > > I made the Address class because in some places it makes it easy to > encapsulate this information. I don't have any relationship() as you > can see in the mapping, that's what I would want but within the > composite object. There is no address table in the schema as my > intention was to avoid a join (city in this case would have been lazy > loaded). > > In order to get this behavior, do I must then create an address table > and join it through a "primaryjoin" in relationship()?
having a separate address table would certainly be preferable, sure. the composite approach would be viewonly: @property def home_address(self): return Address(self.home_street, self.home_city, self.home_zip) in 0.7 it works pretty much in this way. > > Thanks! > > On Jan 10, 10:57 am, Michael Bayer <mike...@zzzcomputing.com> wrote: >> On Jan 10, 2011, at 1:10 PM, Arturo Sevilla wrote: >> >>> Hello, >> >>> I'm trying to do the following: >> >>> 'home': orm.composite( >>> Address, >>> user.c.HomeAddress_Street, >>> # The following column is a UUID but is a foreign key to a >>> mapped >>> # table in SQLAlchemy, ideally would be to say >>> relationship(City) >>> # and specify the column >>> user.c.HomeAddress_City, >>> user.c.HomeAddress_ZipCode >>> ) >> >> I don't understand what this means, i think you're missing some context here >> that would make this easier for others to understand, are there *other* >> columns on "user" that also reference "city" ? I don't understand what >> "relationship() and specify the column" means. relationship() accepts a >> "primaryjoin" expression for this purpose, its in the docs. If you have >> "HomeAddress" and "WorkAddress", you'd make two relationships. >> >> I also have an intuition, since it seems like you want a variant on >> relationship(), that composite is definitely not what you want to be using, >> it pretty much never is, but a picture of all the relevant columns here >> would be helpful. You definitely cannot use a column that's part of a >> relationship() in a composite() as well and manipulating foreign keys >> through composites is not the intended usage. >> >> >> >>> As such I tried a simple if isinstance(city, uuid.UUID): city = >>> City.load(city), where this method is just: >>> @classmethod >>> def load(cls, id): >>> session = Session() >>> obj = session.query(cls).get(id) >>> session.close() >>> return obj >> >>> However during session.commit() it appears that my Session class (made >>> with scoped_session(sessionmaker()) ) goes to None (and crashes). >>> Is this an expected behavior? >> >> no, the scoped_session object always returns either an existing or a new >> Session and is never None. > > -- > You received this message because you are subscribed to the Google Groups > "sqlalchemy" group. > To post to this group, send email to sqlalch...@googlegroups.com. > To unsubscribe from this group, send email to > sqlalchemy+unsubscr...@googlegroups.com. > For more options, visit this group at > http://groups.google.com/group/sqlalchemy?hl=en. > -- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To post to this group, send email to sqlalch...@googlegroups.com. To unsubscribe from this group, send email to sqlalchemy+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/sqlalchemy?hl=en.