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 <[email protected]> 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 [email protected].
> To unsubscribe from this group, send email to
> [email protected].
> 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 [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/sqlalchemy?hl=en.