On Mar 26, 11:46 pm, Crispin Wellington <[EMAIL PROTECTED]>
wrote:
>
> select * from countries left join country_synonyms;
>
> Here are my attempts and their results:
>
>  >>> Session.query(Country).join(CountrySynonym).all()
> InvalidRequestError: Mapper 'Mapper|Country|countries' has no property
> '<class 'helloworld.model.CountrySynonym'>'
>
> >>> Session.query(Country,CountrySynonym).join(CountrySynonym).all()
>
> InvalidRequestError: Mapper 'Mapper|Country|countries' has no property
> '<class 'helloworld.model.CountrySynonym'>'
>
> >>> Session.query(Country).join(CountrySynonym.country_id).all()
>
> AttributeError: 'ColumnProperty' object has no attribute
> '_is_self_referential'
>
> And so on...

query.join() only joins on relations that you set up between mappers.
so if you set up your mappers like:

mapper(Country, countries, properties={
   'synonyms':relation(CountrySynonym)
})

mapper(CountrySynonym, country_synonyms)

then your join would just be:

  query(Country).join('synonyms')

if you want to join tables together where you haven't told your
mappers about their relationship (or you want to join in some other
way besides whats configured), then you use the Table objects again,
but you can still use them with Query via select_from()

  query(Country).select_from(countries.join(country_synonyms))...

With a regular inner join like you're doing, theres also just setting
it up in the WHERE criterion:

  query(Country).filter(Country.id==CountrySynonym.country_id)....


> All the docs use a Table() based approach like
> "sql.execute(countries.join(country_synonyms)..." but I want to use
> the Mapped objects as that's what I'm using everywhere else. I've
> found the docs on sqlalchemy to focus on the Table() and engine based
> interfaces, but the docs focusing on objects and sessions leave a lot
> of guessing.

Plenty of docs on the subject in the ORM tutorial.  For examples of
query.join(), see:

http://www.sqlalchemy.org/docs/04/ormtutorial.html#datamapping_joins

other important ORM chapters are "Mapper Configuration" and "Using the
Session".
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To post to this group, send email to sqlalchemy@googlegroups.com
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
-~----------~----~----~----~------~----~------~--~---

Reply via email to